Как составить список всех запущенных процессов с помощью UNIX-C / C ++ - PullRequest
1 голос
/ 30 января 2011

Я хочу перечислить все процессы в системе. Я использовал команду оболочки "ps" и системную функцию, чтобы получить результат. Тем не менее, это кажется немного сложным. Как использовать функции UNIX C для выполнения этой работы.

Ответы [ 6 ]

2 голосов
/ 30 января 2011

В Linux вы можете проверить псевдофайловую систему /proc на информацию о процессе. Это означает использование набора функций opendir() и поиск числовых подкаталогов - это идентификаторы процессов каждого из процессов, запущенных в системе. В каждом подкаталоге есть множество файлов, которые можно открыть и прочитать с помощью open()/read(), если у вашего процесса есть необходимые привилегии.

См.

Proc (5)

man-страница для более подробной информации о доступной вам информации.

1 голос
/ 07 декабря 2014

пс - это стандарт , в лучшую или в худшую сторону. Он имеет много недооцененных параметров форматирования, которые могут упростить кроссплатформенный анализ его вывода.

/proc более удобен, но не переносим и может быть недоступен локально, даже если поддерживается (например, в среде chroot ).

1 голос
/ 07 декабря 2014

Для этого есть законченное решение.

См. https://sourceforge.net/p/readproc/code/ci/master/tree/

клонируй его используя git и делай что хочешь.

#include"read_proc.h"
int main(void)
{
   struct Root * root=read_proc();
   struct Job * buffer;
   int i=0;
   for(;i<root->len;i++)
   {
       buffer=get_from_place(root,i);
       printf("%s\t%u\n",buffer->name,buffer->pid);
   }
   return 0;
}
0 голосов
/ 30 января 2011

Со страницы справочника ps я прочитал, что вы можете использовать ps -e, чтобы перечислить все процессы в стандартном формате, и ps ax, чтобы перечислить все процессы в формате BSD.

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

0 голосов
/ 30 января 2011

Нет стандартов для поиска информации о процессе; каждый поставщик Unix получает свой собственный механизм предоставления информации системным администраторам.

Linux и Solaris используют файловую систему /proc/ для экспорта информации о процессах в пользовательское пространство, но я не думаю, что они вообще совместимы. (У меня есть смутное воспоминание о том, что Solaris решил экспортировать всю свою информацию в двоичном формате для удаления обработки в ядре, за счет более тесной привязки программ пользовательского пространства к структурам данных ядра. Раньше программа top очень хорошо выглядела в память ядра для чтения таблиц процессов, я не уверен, что это нужно больше, но, возможно, все исторические знания все еще запекаются.)

Если вы хотите быть специфичным для платформы, на справочной странице Linux proc(5) есть нужная вам информация. Счастливого взлома. :)

0 голосов
/ 30 января 2011

Вам просто нужно перечислить /proc/ directory =) Мой вопрос может быть несколько полезен для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...