3

親によって監視されているプロセスがあります。子プロセスでエラーが発生したため、 が呼び出され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。そして、なぜ親を殺すとそれが剥がれるのだろうか。

4

1 に答える 1

8

私はついにそれを理解しました!このプロセスは、実際にはずっと有用な作業を行っていました。プロセスは、低速のファイル システム上の大きなファイルへの最後の参照を保持していました。プロセスが終了すると、ファイルへの最後の参照が解放され、OS がスペースを再利用するように強制されます。ファイルが非常に大きいため、数万回の I/O 操作が必要で、10 分以上かかりました。

于 2013-10-08T22:39:04.250 に答える