Как узнать, ожидает ли родительский процесс дочернего процесса в Linux
В Linux даны два процесса с известными pIds
и один является родителем другого,
Можно ли узнать, ожидает ли родительский процесс завершения дочернего процесса?
Спасибо
1 ответ
Проверьте родительский стек ядра и / или wchan ("канал ожидания")
$ ps -o pid,stat,wchan:24,command 1978243
PID STAT WCHAN COMMAND
1978243 Ss wait bash
$ cat /proc/1978243/wchan
do_wait
$ sudo cat /proc/1978243/stack
[<ffffffff8108008d>] do_wait+0x1cd/0x260
[<ffffffff810812ab>] SyS_wait4+0x7b/0xf0
[<ffffffff815f7cf2>] entry_SYSCALL_64_fastpath+0x1a/0xa4
[<ffffffffffffffff>] 0xffffffffffffffff
Это показывает, находится ли процесс внутри системного вызова ядра - если он показывает wait
syscall, это самый распространенный способ ожидания дочернего процесса.
Обратите внимание, что многие процессы, основанные на событиях , не используют wait()
звоните долго - вместо этого они ждут poll()
вместо этого, пока не получено какое-либо событие (которое может быть или не быть событием SIGCHLD).
Поэтому это работает только с простыми линейными процессами. Для всего остального вам придется проверить исходный код или что-то подобное.