3

C で開発されたプログラムがあります。このプログラムには 2 つのサブスレッドが含まれています。場合によっては、アプリケーションを停止しようとするとkill -15 <pid of main thread>、アプリケーションが終了しません。ps auxまた、出力にはメイン スレッドの pid しか表示されません (サブスレッドの pid は の出力には表示されませんps aux)。残りの pid を kill し続けてもkill -15 <pid>、このプロセスは終了しません。プロセスの終了のみkill -9 <pid>を引き起こします。

この動作は、1000 回の試行で 3 回発生します。

  • OSはOpenWRT Linux
  • カーネルのバージョンは 2.6.30 です
  • ライブラリ:libuClibc-0.9.30.1.soおよびlibpthread-0.9.30.1.so

私のプログラムには sigaction ハンドラが含まれていないため、このトピックをこれと重複させないでください。

4

1 に答える 1

2

重複していませんが、答えは同じです。strace または gdb を接続し、ハングしたときに何をしているかを確認します。ただし、2 つの説明しかありません。あなた (または使用している一部のライブラリ コード) が でブロックされSIGTERMsigprocmaskいるか、プロセスがカーネルで中断できないスリープ状態に陥っています。これは通常、死にかけているような障害のあるストレージ デバイスにアクセスしようとした結果です。ハードドライブまたは傷のある光学ディスク。

使用している OS、カーネルのバージョン、ライブラリなどについて詳しく教えてください。

于 2013-06-11T16:42:39.743 に答える