2013-06-11 141 views
3

我有一個在C開發的程序。這個程序包含2個子線程。有時候,當我嘗試用kill -15 <pid of main thread>停止我的應用程序時,應用程序不會退出。而且我只能看到ps aux輸出中的主線程的pid(子線程的pid不顯示在ps aux的輸出中)。並保持與kill -15 <pid>殺死剩餘的PID不會導致此過程的終止。只有kill -9 <pid>會導致進程終止。爲什麼「殺-15」有時會失敗?

此行爲在1000次嘗試中發生3次。

  • 操作系統是Linux的的OpenWRT
  • 內核版本2.6.30是
  • 利布斯:libuClibc-0.9.30.1.solibpthread-0.9.30.1.so

請不要考慮這個話題this one重複的,因爲我的程序不包含sigaction處理程序。

回答

2

這不是重複的,但答案是一樣的。掛上strace或gdb,看看它掛起來是幹什麼的。然而,只有兩種解釋:你或者你正在使用的一些庫代碼會阻止SIGTERMsigprocmask,或者進程在內核中處於不可中斷的睡眠狀態,這通常是因爲嘗試訪問類似失敗的存儲設備一個垂死的硬盤或劃傷的光盤。

您能否詳細說明您使用的操作系統,內核版本,庫等?

+0

- 操作系統是Linux的的OpenWRT - 內核版本2.6.30是 - 利布斯:'libuClibc-0.9.30.1.so'和'的libpthread-0.9.30.1.so' – MOHAMED

+0

哦。 uClibc是否配置爲LinuxThreads而不是NPTL?如果是這樣,它會處理各種破碎的信號,你真的沒有希望它能正常工作。 –

+0

非常感謝您的回答。所以我必須找到其他解決方案。你能否提供一些討論這個問題的主題鏈接 – MOHAMED

相關問題