親によって監視されているプロセスがあります。子プロセスでエラーが発生したため、 が呼び出されabort
ました。プロセスは中止プロセスを改ざんしないため、予期したとおりに処理を続行する必要があります (コアのダンプ、終了)。親は子の終了を検出し、失敗に対応する一連のイベントをトリガーすることになっています。子はマルチスレッドで複雑です。
これが私が見たものですps
:
F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND
0 1000 4929 1272 20 0 85440 6792 wait S+ pts/2 0:00 rxd
1 1000 4930 4929 20 0 0 0 exit Zl+ pts/2 38:21 [rxd] <defunct>
したがって、子 (4930) は終了しました。ゾンビです。さすがに付けられません。ただし、親 (4929) はブロックされたままです。
int i;
// ...
waitpid (-1, &i, 0);
したがって、子供はゾンビのように見えますが、どういうわけか、親がそれを刈り取るために必要なすべてを完了していません。のWCHAN
分野exit
は、貴重な手がかりだと思います。
プラットフォームは 64 ビット Linux、Ubuntu 13.04、カーネル 3.8.0-30 です。子供はコアをダンプしたり、何もしていないようです。システムを数分間離れましたが、何も変わりませんでした。
これを引き起こしている可能性のあるもの、またはそれについて私にできることはありますか?
更新:もう 1 つの興味深い情報です。私kill -9
が親プロセスである場合、子プロセスは終了します。親プロセスは自明であり、単にブロックしているだけなので、これは一種の困惑waitpid
です。また、この問題が発生したときに (子から) コア ダンプを取得しません。
更新:子が で立ち往生しているようです、 from とschedule
呼ばれ、 fromexit_mm
と呼ばれdo_exit
ます。なぜexit_mm
と呼ぶのだろうかschedule
。そして、なぜ親を殺すとそれが剥がれるのだろうか。