当前位置: 技术问答>linux和unix
thread的高级问题?想请教内核高手,所以才贴到这儿?
来源: 互联网 发布时间:2015-07-03
本文导语: 大家可以做一个测试,我在RED HAT 8.0 写了一个小程序: #include #include void *run(void *arg) { sleep(30); } int main() { pthread_t id; pthread_create(&id,NULL,run,NULL); sleep(100); } 运行后,用 ps -ef 查看时只显示一个进程 P...
大家可以做一个测试,我在RED HAT 8.0 写了一个小程序:
#include
#include
void *run(void *arg)
{
sleep(30);
}
int main()
{
pthread_t id;
pthread_create(&id,NULL,run,NULL);
sleep(100);
}
运行后,用 ps -ef 查看时只显示一个进程
PID PPID name
1234 200 a.out
用 ps -efm 查看进程线程时:
PID PPID name
1234 200 a.out
1235 1234 a.out
1236 1235 a.out
我现在可以说: 1234 是进程ID,1235 是主线程ID,1236是创建的线程ID,运行函数是run.一般来说主线程1235是不会defunct的.因为我们没法处理.但是我的程序就出现了,当运行到三五天.就会出现如下状态:
PID PPID name
1234 200 a.out
1235 1234 a.out(defunct)
1236 1 a.out
现在问题是 1235 号线程是怎么僵死的? 什么原因可能导致?
( 可以通过发送 kill -9 1235 出现这种状态. 但发送kill -9 1234 或 kill -9 1236,a.out 程序都退出.)
谢谢?
#include
#include
void *run(void *arg)
{
sleep(30);
}
int main()
{
pthread_t id;
pthread_create(&id,NULL,run,NULL);
sleep(100);
}
运行后,用 ps -ef 查看时只显示一个进程
PID PPID name
1234 200 a.out
用 ps -efm 查看进程线程时:
PID PPID name
1234 200 a.out
1235 1234 a.out
1236 1235 a.out
我现在可以说: 1234 是进程ID,1235 是主线程ID,1236是创建的线程ID,运行函数是run.一般来说主线程1235是不会defunct的.因为我们没法处理.但是我的程序就出现了,当运行到三五天.就会出现如下状态:
PID PPID name
1234 200 a.out
1235 1234 a.out(defunct)
1236 1 a.out
现在问题是 1235 号线程是怎么僵死的? 什么原因可能导致?
( 可以通过发送 kill -9 1235 出现这种状态. 但发送kill -9 1234 或 kill -9 1236,a.out 程序都退出.)
谢谢?
|
你的程序有问题,没有用pthread_join(id),默认情况都要用pthread_join
|
用DETACH方式create