为什么“杀死-15”有时会失败?

时间:2013-06-11 16:33:05

标签: c linux multithreading process kill

我有一个用C开发的程序。这个程序包含2个子线程。有时,当我尝试使用kill -15 <pid of main thread>停止我的应用程序时,应用程序不会退出。我只能看到ps aux输出中主线程的pid(子线程的pid没有显示在ps aux的输出中)。并使用kill -15 <pid>继续杀死剩余的pid不会导致此过程的终止。只有kill -9 <pid>才会导致流程终止。

此行为在1000次尝试中发生3次。

  • 操作系统是OpenWRT Linux
  • 内核版本为2.6.30
  • Libs:libuClibc-0.9.30.1.solibpthread-0.9.30.1.so

请不要认为此主题与this one重复,因为我的程序不包含sigaction处理程序。

1 个答案:

答案 0 :(得分:2)

这不重复,但答案是一样的。附加strace或gdb,看看挂起时它正在做什么。但是只有两种解释:要么你(或者你正在使用的某些库代码)用SIGTERM阻塞sigprocmask,要么进程陷入内核的不间断睡眠状态,这通常是由于试图访问失败的存储设备,如死亡的硬盘驱动器或划伤的光盘。

您能详细说明您正在使用的操作系统,内核版本,库等吗?