在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
。
关于c - 在c程序中,当主线程终止时,整个进程是否终止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10201948/