我有一个用C开发的程序。这个程序包含2个子线程。有时,当我尝试使用kill -15 <pid of main thread>
停止我的应用程序时,应用程序不会退出。我只能看到ps aux
输出中主线程的pid(子线程的pid没有显示在ps aux
的输出中)。并使用kill -15 <pid>
继续杀死剩余的pid不会导致此过程的终止。只有kill -9 <pid>
才会导致流程终止。
此行为在1000次尝试中发生3次。
libuClibc-0.9.30.1.so
和libpthread-0.9.30.1.so
请不要认为此主题与this one重复,因为我的程序不包含sigaction处理程序。
答案 0 :(得分:2)
这不重复,但答案是一样的。附加strace或gdb,看看挂起时它正在做什么。但是只有两种解释:要么你(或者你正在使用的某些库代码)用SIGTERM
阻塞sigprocmask
,要么进程陷入内核的不间断睡眠状态,这通常是由于试图访问失败的存储设备,如死亡的硬盘驱动器或划伤的光盘。
您能详细说明您正在使用的操作系统,内核版本,库等吗?