Wie Sie wissen, ob ein übergeordneter Prozess in Linux auf einen untergeordneten Prozess wartet

962
idelvall

In Linux zwei Prozesse mit bekannten pIdsund einem übergeordneten Prozess des anderen,

Kann man wissen, ob das übergeordnete Element auf den Abschluss des untergeordneten Prozesses wartet?

Vielen Dank

0
Schau dir den Quellcode an Ipor Sircer vor 7 Jahren 0
Ich fürchte, das ist der einzige Weg idelvall vor 7 Jahren 0
Dies könnte ein wenig hilfreich sein -> http://stackoverflow.com/questions/801604/how-do-i-tell-what-a-linux-process-is-waiting-for hysterical vor 7 Jahren 0

1 Antwort auf die Frage

4
grawity

Überprüfen Sie den Kernel Stack und / oder Wchan ("Wait Channel") der Eltern.

$ 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 

Dies zeigt an, ob sich der Prozess in einem Kernel-Syscall befindet. Wenn er den waitSyscall anzeigt, ist dies die häufigste Art, auf einen untergeordneten Prozess zu warten.

Beachten Sie, dass viele ereignisbasierte Prozesse den Aufruf lange Zeit nicht verwenden. wait()Stattdessen warten sie poll()stattdessen auf, bis ein Ereignis empfangen wird (das möglicherweise ein SIGCHLD-Ereignis ist oder nicht).

Dies funktioniert daher nur mit einfachen linearen Prozessen. Für alles andere müssten Sie den Quellcode oder so überprüfen.

Danke @Grawity, das ist wirklich nützlich. Ich kann sehen, dass die beiden ersten Befehle zu der wartenden Stack-Anweisung führen, aber wie kann man sicher sein, dass es für den untergeordneten Prozess und nicht für ein anderes Ereignis steht? idelvall vor 7 Jahren 0
@idelvall: Wenn es `wait ()` genannt hat, wartet es auf einen untergeordneten Prozess, denn dies ist das einzige, was der` wait () `syscall _does_ tut. [Im Gegensatz zu "poll ()", das auf beliebige Ereignisse auf fds warten würde.] grawity vor 7 Jahren 0
perfect @grawity, danke für die klärung idelvall vor 7 Jahren 0
Was ist, wenn der Parent mehrere untergeordnete Prozesse erstellt hat? idelvall vor 7 Jahren 0