ven*_*s.w 1 c unix multithreading 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)),当主线程终止时,其他线程是否还在运行?
返回main等同于调用exit,并终止进程.要终止只有一个线程,请使用pthread_exit.请注意,它对于要调用的初始线程有效pthread_exit(并且在所有线程退出或直到其中一个调用之前,进程不会终止exit),并且pthread_exit如果从start函数返回,则初始线程以外的线程会隐式调用.
在 unix 上,进程在最后一个线程终止后终止。请注意,这可以是任何线程,而不仅仅是“主”线程。因此,如果您将 exit 替换为pthread_exit,但在返回 main 之前生成了一个线程,则您的进程将不会终止。