Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在c程序中,当主线程终止时,整个进程是否终止?_C_Multithreading_Unix_Process_Linux Kernel - Fatal编程技术网

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

在c程序中,当主线程终止时,整个进程是否终止?,c,multithreading,unix,process,linux-kernel,C,Multithreading,Unix,Process,Linux Kernel,在linux中,当主线程终止时,无论它如何终止,整个进程都会通过函数exit()或从主线程返回而退出。如果主线程从main()返回,它将返回到名为crt.o或类似的“C运行时”。在crt.o中,其c代码如下:exit(main(argc,argv));主线程将调用exit() 最终,所有线程都会终止 我的想法正确吗 如果在crt.o中exit()被诸如void thread_exit(int)之类的线程终止函数替换,该函数只能终止具有退出状态的线程,那么crt.o的c源代码看起来像thread_

在linux中,当主线程终止时,无论它如何终止,整个进程都会通过函数exit()或从主线程返回而退出。如果主线程从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)),当主线程终止时,其他线程是否仍在运行?

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

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

main
返回相当于调用
exit
,并终止进程。要仅终止单个线程,请使用
pthread\u exit
。请注意,初始线程调用
pthread\u exit
是有效的(在所有线程退出或其中一个线程调用
exit
之前,进程不会终止)如果从起始函数返回,则初始线程以外的线程隐式调用
pthread\u exit

main
返回等同于调用
exit
,并终止进程。要仅终止单个线程,请使用
pthread\u exit
。请注意,初始线程调用
pthread\u exit
是有效的(在所有线程退出或其中一个线程调用
exit
之前,进程不会终止)如果你从它们的启动函数返回,除了初始线程之外的线程会隐式调用
pthread\u exit

感觉编写一个测试程序比编写一个问题更快:)@sarnold:编写一个测试程序很少是回答这样一个问题的正确方法。感觉编写一个测试程序比编写一个问题更快告诉而不是写问题的测试程序:)@sarnold:写测试程序很少是回答这样一个问题的正确方法。@MartinJames OP想知道如果我们用
pthread_exit()
替换
exit()
会发生什么。。考虑做一件奇怪的事。@MartinJames OP想知道如果我们用
pthread\u exit()
替换
exit()
会发生什么,嗯。。考虑做一件奇怪的事。