Текущие запущенные приложения в Linux

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

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

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

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


person Ingila Ejaz    schedule 31.05.2012    source источник
comment
Пожалуйста, спросите superuser.com в следующий раз.   -  person Denys Séguret    schedule 31.05.2012
comment
Почему нельзя использовать ps? Также обратите внимание, что приложение Windows отличается от процесса Linux, поэтому вы вряд ли получите решение, которое работает именно так, как вы хотите, во всех случаях.   -  person Rob I    schedule 31.05.2012
comment
но мне нужен способ отображать только имена запущенных в данный момент приложений, таких как chrone и т. д.   -  person Ingila Ejaz    schedule 31.05.2012


Ответы (4)


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

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

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

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

РЕДАКТИРОВАТЬ: я забыл упомянуть, что процессы разветвляются в Linux, поэтому есть родительский процесс, который запускает пару других процессов/потоков. Из вашего вопроса кажется, что вы пытаетесь найти родительский процесс для каждого запущенного процесса, мои ответы основаны на этом предположении.

person Saman Barghi    schedule 31.05.2012
comment
Да, Саман Барги, мне просто нужны родительские процессы. Какая должна быть команда? - person Ingila Ejaz; 01.06.2012
comment
Saman Barghi htop не работает на моем Linux, хотя я использую opensuse11.4 :( - person Ingila Ejaz; 01.06.2012
comment
Попробуйте это и дайте мне знать, если это поможет: pstree | awk '{print $1}' | sed 's/^|//g' | sed -e '/^$/d' -e 's/^\-//g' В нем перечислены все родительские процессы. Вы можете добавить дополнительные параметры фильтра и изменить его в соответствии с вашими потребностями. - person Saman Barghi; 01.06.2012
comment
Используете ли вы пакет opensuse по умолчанию для htop? Вы пробовали создавать исходники. Получите его отсюда: htop - person Saman Barghi; 01.06.2012
comment
Большое спасибо @saman Barghi. Это было действительно полезно. Большое спасибо. - person Ingila Ejaz; 04.06.2012

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

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

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

Возвращаясь к проблеме, которую вы хотели бы решить: с моей точки зрения, есть два способа, которые вы могли бы попробовать:

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

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

person happenpappen    schedule 31.05.2012

Проверьте сверху (команда linux)

И эта статья вам очень поможет. http://www.cyberciti.biz/tips/top-linux-monitoring-tools.html

person Florin Stingaciu    schedule 31.05.2012

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

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

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

person n. 1.8e9-where's-my-share m.    schedule 31.05.2012