求助:CentOS 上线程无法得到执行的问题
求助各位大神,我是 linux 新手,对遇到的问题完全没有头绪。
我写了一个服务程序运行在 CentOS 上,但是发现不定期的(大约一个月出现1、2次)会有某个线程得不到执行。一旦这个问题出现,大多数时候守护进程也是挂起的。由于代码是很复杂的,所以下面我用简化的逻辑来描述一下:
main()
{
// 1. 初始化一些变量、初始化日志文件
// 2. 设置信号处理回调函数
// 3. 转化为守护进程(也就是 fork 两次,但是没有关闭标准输入输出)
// 4. 使用 pthread_create、pthread_detach 创建其它线程 A、B、。。。Z (数量不定,这里只是示例)
// 5. 循环等待退出信号 quit_signal,这个变量在收到 SIGTERM 时被设置为 true
unsigned char check_alive = 0;
while (!quit_signal)
{
check_alive++;
if (0 == check_alive) Log("Main task is alive.");
usleep(1000000);
}
Log("Server is going to stop...");
// 6. 停止线程 A、B、。。。Z,然后退出
}
主要问题:
(1)我有其它的脚本会检测这些线程中的一些输出,有时会发现线程 A、B、。。。Z 中的某个没有在运行。这种时候,我给进程发送 SIGTERM 信号,通过日志,我能够看到进程接收并处理了 SIGTERM 信号,并且 quit_signal 被设置为了 true。按照道理来说,我应该在日志中看到 "Server is going to stop..." 这句话,但是没有!说明这个时候守护进程也没有得到执行!
(2)守护进程会每隔 255 秒在日志文件中写入 "Main task is alive." 这句话。但是有时候,这句话从某个时间点后再也看不到了,说明从那个时间点开始,守护进程再也没有得到执行。
我对此毫无头绪。请教各位大神,什么情况会造成这种结果?或者,我该怎样去寻找问题的根源所在?
先谢了!