В момента изпълнявани приложения в Linux

Работя върху проект, подобен на това, което наричаме системен монитор в Linux. Използвам opensuse 11.4 gnome. Чудех се дали има някаква команда (освен 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" принадлежат към постфикса на приложението. Можете да видите, че всеки от тези процеси принадлежи на един родителски процес „главен“, като погледнете третата колона, която ви казва родителския процес, който е стартирал този процес. В моя пример всички процеси са стартирани от процес с id 3708. Друг пример е уеб сървърът Apache, който създава няколко httpd процеса при стартиране - тук имената на процесите са еднакви, само броят варира в зависимост от конфигурацията.

За да се върна към проблема, който искате да разрешите: От моя гледна точка има два начина, които можете да опитате:

  1. Създайте база данни, която съдържа асоциации на имена на процеси към приложения и използвайте това, за да създадете списък с приложения с помощта на ps.
  2. Ограничавате вашето приложение да изброява само приложения, които показват графичен потребителски интерфейс. Този списък трябва лесно да се изгради с помощта на някои X11 функции или други подобни...

Надявам се това да помогне...

person happenpappen    schedule 31.05.2012

Вижте отгоре (линукс команда)

И тази статия ще ви помогне много. 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