LINUX.ORG.RU

процессы


0

0

многуважаемый all, как из проги написанной на си, можно посмотреть, есть ли процесс с таким - то пид, и еще если можно, то как посмотреть, висит (всмысле повис) процесс или нет?

anonymous

Если дочерний просесс, то
man waitpid
Флаги WNOHANG|WUNTRACED
Ловишь status, далее

WIFSTOPPED(status) - вернет не 0, если висит.

Если любой процесс (не дочерний), то нет переносимого способа это сделать
(насколько мне известно). Под Линуксом можно вручную разобрать
соответствующее вхождение /proc (man 5 proc):
Пусть интересует PID #

1. Открываем на чтение /proc/#/stat Если нет, то нет такого.
2. Третье поле единственной строки файла - буква:
One character from the string
"RSDZT" where R is running, S is
sleeping in an interruptible wait, D
is sleeping in an uninterruptible
wait or swapping, Z is zombie, and T
is traced or stopped (on a signal).

Die-Hard ★★★★★
()

ret = kill(pid, 0); if(ret == 0 || ret < 0 && errno == EPERM) такой процесс есть. Вполне переносимо. По поводу зависания... Что значит процесс завис? Например, он ждет данных из потока, которых никогда не будет, это он завис?

idle ★★★★★
()

> WIFSTOPPED(status) - вернет не 0, если висит.





Нет. означает, что процесс остановлен SIGSTOP.





idle ★★★★★
()

Ну да, я забыл про первую часть вопроса, отвечая на вторую. Конечно,
kill(pid,0) - вполне переносимо.

idle (*) (2002-09-03 03:47:43.888):
> ...означает, что процесс остановлен SIGSTOP.
Я так понял, вопрос как раз про это и был.



Die-Hard ★★★★★
()

10x всем =)

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.