マニュアルページには、wait(2)
指定されたプロセスが呼び出しプロセスの子プロセスでない場合、waitpid
システムコールがエラーを返すことが示されています。ECHILD
なぜこれですか?子以外のプロセスを待つと、セキュリティの問題の種類が発生しますか?サブプロセスではなく待機を実装するのが難しいか不可能な技術的な理由はありますか?
ベストアンサー1
仕組みが原因ですwaitpid
。 POSIXシステムでは、親プロセスの子プロセスが終了すると信号(SIGCHLD)が渡されます。高レベルでwaitpid
実行されるすべての操作は、指定されたプロセス(またはプロセスの1つ)に対してSIGCHLD信号が転送されるまでブロックされます。 SIGCHLD信号は決して転送されないため、任意のプロセスを待つことはできません。