3

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

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

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

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

4

1 回答 1

2

它不是重复的,但答案是一样的。附加 strace 或 gdb 看看它挂起时在做什么。然而只有两种解释:要么你(或你正在使用的一些库代码)被 阻塞SIGTERMsigprocmask要么进程卡在内核中的不间断睡眠中,这通常是尝试访问失败的存储设备的结果,就像一个垂死的硬盘驱动器或划伤的光盘。

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

于 2013-06-11T16:42:39.743 回答