900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > OS / Linux / 主线程退出了 子线程会退出吗?

OS / Linux / 主线程退出了 子线程会退出吗?

时间:2020-06-15 16:06:49

相关推荐

OS  / Linux / 主线程退出了 子线程会退出吗?

在 linux 世界中,主线程退出了,子线程是否退出是要看主线程的退出方式。

主线程以 return 的方式退出。

主线程以 pthread_exit() 函数的方式退出。

前者,main() 执行完 return 之后,实际上会调用 exit() 函数,该函数除了执行关闭IO等操作之外,还会执行关掉其他子线程的操作。

后者,在主线程中执行 pthread_exit() ,实际上是提前结束了 main 的主线程,也就无法执行后续的 exit() 函数了。所以,这种方法是可以达到主线程退出子线程继续运行的目的。

栗子:

#include <iostream>#include <pthread.h>#include <unistd.h>void *func(void *args){while (true){std::cout << "I am func." << std::endl;sleep(3);}}int main(){pthread_t pid = 0;pthread_create(&pid, nullptr, func, nullptr);pthread_detach(pid);pthread_exit(nullptr);return 0;}

对于后来来说,由于子线程没有办法继续运行,所以子线程所在的进程也就变成了僵尸进程。验证方法:

ps -ef | grep test

结果:

xcl 1672 3102 0 17:40 pts/0 00:00:00 [test.o] <defunct>

“defunct”标识就是僵尸进程标识。

(SAW:Game Over!)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。