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

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

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

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

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

这不是重复的,但答案是一样的。 挂上strace或者gdb,看看它挂起来是干什么的。 然而,只有两个解释:你(或者你正在使用的一些库代码)使用sigprocmask来阻塞SIGTERM ,或者进程被困在内核的sigprocmask中断的睡眠中,这通常是因为试图访问一个失败的存储设备垂死的硬盘或划伤的光盘。

你能详细说明一下你使用的操作系统,内核版本,库等吗?