Определить состояние процесса - PullRequest
2 голосов
/ 12 февраля 2012

Я пытаюсь выяснить состояние процессов, использующих C (работает, спит или вышел) в среде linux.

Сначала я думал о том, как сделать это, чтобы вызвать execv() скоманда ps 12345, где 12345 будет идентификатором процесса, а затем проанализирует выходные данные, чтобы получить STAT.Однако я не думаю, что смогу получить вывод этого в мою программу, поскольку он просто выводит автоматически (или я могу?).

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

Итак, мой вопрос, как мне определитьсостояние процесса в C?

Ответы [ 3 ]

8 голосов
/ 12 февраля 2012

В linux есть файл разделенных пробелами значений, который называется /proc/[pid]/stat.Третье значение - это состояние процесса.

Например:

[cnicutar@fresh self]$ cat /proc/3529/stat
3529 (bash) S 3528 3529 ......
            ^

Кроме того, есть также файл /proc/[pid]/status:

[cnicutar@fresh self]$ cat /proc/3529/status
Name:   bash
State:  S (sleeping)
....................

Я бы просто использовал fscanf на stat.

2 голосов
/ 12 февраля 2012

Если вы хотите проанализировать вывод команды, используйте popen.

Я думаю, что есть более простой способ сделать это, должен быть C API для доступа к информации о процессе ... (примечание: есть также /proc/12345/status)

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

Взгляните на это: http://sourceforge.net/p/readproc/code/ci/master/tree/

вы можете использовать struct Job.status для этого.

#include"read_proc.h"
int main(void)
{
   struct Root * root=read_proc();
   printf("state: %c\n",root->first->status);
   return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...