Detach
当其他线程调用exit(),分离的线程将会收到影响而终止。
Zombie 僵尸线程
- Not Detached;
- Non pthread_join() or wait();
僵尸进程是一个已经结束的进程/线程,但OS保留部分信息以备父进程查询, OS会在结束时清理僵尸进程。
僵尸进程在多进程环境下,父进程要长时间运行 ,期间可能创建子进程,然后子进程有退出时,但是父进程还在运行,这时就产生了zombie进程。
子进程退出后,在进程表中还要占一项,并且子进程的一些资源等待父进程回收。如果父进程没有显示地调用wait来为子进程回收资源的话,在父进程退出之前子进程就变成了僵尸进程。如果父进程退出了,僵尸子进程也消失了。
#include <unistd.h>
#include <iostream>
#include <pthread.h>
using namespace std;
int main()
{
pid_t child;
switch(child = fork()) {
case -1:
exit(0);
case 0:
exit(0);
break;
default:
cout << getpid() << endl;
sleep(100);
}
return 0;
}
$ ps -aux | grep "main"
xx 5718 0.0 0.0 15440 1608 pts/2 S 17:37 0:00 ./main
xx 5719 0.0 0.0 0 0 pts/2 Z 17:37 0:00 [main] <defunct>
$ kill -9 5718