在一个c程序中,当主线程终止时,整个过程是否终止?

时间:2012-04-18 02:24:58

标签: c multithreading unix process linux-kernel

在linux中,当主线程无论如何终止时,整个进程都会退出,函数exit()或从main返回。如果主线程从main()返回,它将返回到称为crt.o的“C运行时”或类似的东西。在crt.o中,其c代码如下:exit(main(argc,argv)); exit()将由主线程
调用 最终,所有线程终止。

我的想法是否正确?

如果在crt.o exit()中被一个线程终止函数替换,如void thread_exit(int),它只能终止一个退出状态的线程,那么crt.o的c源代码就好像是thread_exit(main) (argc,argv)),当主线程终止时,其他线程是否还在运行?

2 个答案:

答案 0 :(得分:6)

main返回相当于调用exit,并终止进程。要仅终止单个线程,请使用pthread_exit。请注意,它对于调用pthread_exit的初始线程有效(并且该进程在所有线程都退出或直到其中一个调用exit之前不会终止)并且初始线程以外的线程隐式调用{{ 1}}如果你从他们的开始函数返回。

答案 1 :(得分:4)

在unix上,进程在最后一个线程终止后终止。请注意,这可以是任何线程,而不仅仅是“主”线程。因此,如果您使用pthread_exit替换exit,但在main中返回之前生成了一个线程,则您的进程将不会终止。

相关问题