2012-05-31 1 views
2

Я работаю над проектом, аналогичным тому, что мы называем системным монитором в Linux. Я использую opensuse 11.4 gnome. Мне было интересно, есть ли какая-либо команда (кроме ps), в которой перечислены все текущие приложения в системе. Я разрабатываю его для многоядерной среды.Текущие приложения в Linux

Например, я просматриваю веб-страницы с помощью Firefox и одновременно говорю Google Chrome, а также редактирую текст в текстовом файле. В этом случае, когда я открываю свой проект, мне нужен список всех запущенных приложений. [В моем сценарии имена gEdit, Google Chrome и Firefox (но не процесс, который эти три приложения были созданы) должны отображаться как список]

Результат, который я хочу, совпадает с тем, что мы получаем на вкладке «Приложения», когда мы используем диспетчер задач в Windows.

Если у кого-то есть решение, пожалуйста, сообщите мне, что он будет очень благодарен. Я использую netbeans для реализации проекта. Благодаря!!!

+0

В следующий раз запросите у superuser.com. –

+0

Почему вы не можете использовать ps? Также обратите внимание, что приложение «Windows» отличается от Linux «Process», поэтому вряд ли вы получите решение, которое будет работать точно так, как вы хотите во всех случаях. –

+0

, но я хочу, чтобы отображать только имена текущих запущенных приложений, таких как chrone и т. Д. –

ответ

0

Вы пробовали pstree еще? ну это показывает вам дерево процессов, запущенных в системе.

htop - это то, что я обычно использую для многоядерного окружения, потому что оно показывает использование ресурсов, и вы можете видеть, где ваши процессы закреплены добавлением столбцов. htop более дружелюбен, чем топ, и имеет больше возможностей. когда вы запускаете его, просто нажмите «t», и он будет сортировать процессы по их родителям.

Я не знаю никаких других инструментов, но другой вариант - пройти через /proc и написать собственный скрипт, чтобы извлечь нужную вам информацию.

Надеюсь, это поможет.

EDIT: Я забыл упомянуть, что процессы разветвляются в linux, поэтому существует родительский процесс, который запускает несколько других процессов/потоков. Из вашего вопроса кажется, что вы пытаетесь найти родительский процесс для каждого запущенного процесса, мои ответы основаны на этом предположении.

+0

Да Saman Barghi Мне просто нужны родительские процессы. Какая должна быть команда? –

+0

Saman Barghi htop не работает на моей Linux, хотя я использую opensuse11.4 :( –

+0

Попробуйте это и дайте мне знать, если это поможет: 'pstree | awk '{print $ 1}' | sed 's/^ | // g '| sed -e'/^ $/d '-e' s/^ \ - // g'' В нем перечислены все родительские процессы. Вы можете добавить дополнительные параметры фильтра и изменить его в соответствии с вашими потребностями. –

2

Я не думаю, что есть простой способ добиться этого. В Linux приложение может создать несколько процессов при запуске - например, давайте возьмем постфикс:

 
localhost:~ # ps -ef|grep postfix 
root  3708  1 0 Apr24 ?  00:00:35 /usr/lib/postfix/master 
postfix 3748 3708 0 Apr24 ?  00:00:01 qmgr -l -t fifo -u 
postfix 3749 3708 0 Apr24 ?  00:00:00 pickup -l -t fifo -u -c 
postfix 13504 3708 0 16:05 ?  00:00:00 cleanup -z -t unix -u -c 
postfix 15458 3708 0 17:45 ?  00:00:00 cleanup -z -t unix -u -c 
postfix 19907 3708 0 19:25 ?  00:00:00 cleanup -z -t unix -u -c 

Процессов «мастер», «QMGR», «пикап» и «зачистка» все они принадлежат к постфиксу приложения. Вы можете видеть, что эти процессы относятся к одному из родительских процессов «master», смотря на третий столбец, который сообщает вам о родительском процессе, который начал этот процесс. В моем примере все процессы были запущены с помощью процесса с идентификатором 3708. Другим примером является веб-сервер Apache, который создает несколько процессов httpd при запуске - здесь имена процессов все равно, только количество зависит от конфигурации.

Чтобы вернуться к этой проблеме вы хотели бы решить: С моей точки зрения есть два способа вы могли бы попробовать:

  1. Построить базу данных, которая содержит ассоциации имен процессов к приложениям и использовать этот для создания списка приложений с помощью ps.
  2. Вы запрещаете вашему приложению перечислять только приложения, отображающие графический интерфейс пользователя. Этот список должен быть легко построить с помощью некоторых функций X11 или подобных ...

надеюсь, что это помогает ...

0

Вы можете начать с xlsclients.

Он, вероятно, не обладает всеми необходимыми функциями, но тогда Linux не имеет четко определенного понятия приложения.

Следующая полезная вещь: xprop (ищите _NET_WM_PID), но это не гарантирует работу для всех программ.