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