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

标签 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)), 当主线程终止时,其他线程是否还在运行?

最佳答案

main 返回相当于调用exit,并终止进程。要终止单个线程,请使用 pthread_exit。请注意,初始线程调用 pthread_exit 是有效的(并且进程不会终止,直到所有线程都退出或直到其中一个线程调用 exit)和线程以外的线程如果您从它们的启动函数返回,初始线程将隐式调用 pthread_exit

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

相关文章:

linux - Bash enter & ctrl-z 按键

以数组值作为条件的 for 循环的正确使用

android - 如何在 Android 多线程程序中停止 looper.loop()?

c - 如何连接两个字符数组以在 C 中从 fopen 打开文件?

java - 多线程文件传输到 FTP 服务器

java - 在不同的 servlet 之间共享资源

unix - cygwin 帮助修剪输出

c - 在 fork() 中,execl 不会返回父级

c++ - Vector2 运算符改进

无法在STM32F4微 Controller 上闪烁LED