Получить PID, анализируя вывод / bin / ps - PullRequest
1 голос
/ 24 июня 2011

Внутри C-программы я построчно читаю вывод / bin / ps -fu1000 и ищу строку, например "gnome". Когда я нашел строку (гном), как я могу получить pid? Вся строка сохраняется в символьном буфере [256].

cm       12556     1  0 10:47 ?        00:00:13 gnome-terminal

... и да, это часть домашней работы.


Прочитав некоторые комментарии:

Мне пришлось использовать C. Цель задачи - написать программу, которая будет отправлять сигналы запущенным процессам, содержащую указанную строку в своем имени.

Мой подход такой:

fp = popen("/bin/ps -fu1000", "r");
while(fgets(line, sizeof line, fp)){
  if(strstr(line, "gnome")){
    printf("found\n");
    /* do some nice stuff to get the PID */
  }
}

Ответы [ 3 ]

1 голос
/ 24 июня 2011

Если это в C, попробуйте взглянуть на стандартную библиотечную функцию sscanf. Документация должна быть доступна через справочную страницу системы типа Unix, такой как Linux, или через онлайн-справку, такую ​​как GNU C Reference .

0 голосов
/ 24 июня 2011

Если вы работаете на платформе Linux, с точки зрения вашей точности, вы можете перебирать каждую папку PID в / proc и читать файл cmdline.Это в основном то, что делает ps.

И, отслеживая папку, в которой вы находитесь, вы можете получить pid.

0 голосов
/ 24 июня 2011

Попробуйте заменить пробелы на уникальный разделитель.Затем найдите столбец PID, переходящий от одного разделителя к другому.

...