在c程序中,当主线程终止时,整个进程是否终止?
在linux中,当主线程终止时,无论它如何终止,整个进程都会通过函数exit()或从主线程返回而退出。如果主线程从main()返回,它将返回到名为crt.o或类似的“C运行时”。在crt.o中,其c代码如下:exit(main(argc,argv));主线程将调用exit() 最终,所有线程都会终止 我的想法正确吗在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_
如果在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()
会发生什么,嗯。。考虑做一件奇怪的事。