简单验证主线程退出,子线程强制退出吗?
程序员文章站
2022-06-10 23:33:19
...
一个进程可以生成多个线程,创建其他线程的进程,称为主线程。现在要探讨的问题,当主线程退出后,子进程还在运行吗?现在编写程序验证这个问题。
主线程中不调用以下函数:
- pthread_join
因为该函数会阻塞主线程,直到有子进程终止。 - pthread_detach
准确地说,是不循环调用pthread_detach,循环调用pthread_detach,自然无法让主线程退出
验证代码如下:
thread.c
#include <unistd.h> // sleep
#include <pthread.h> // pthread_t pthread_create pthread_self
#include <stdio.h> // puts
void *thread_main(void *args);
int main()
{
pthread_t t_id;
if (pthread_create(&t_id, NULL, thread_main, NULL) != 0)
{
puts("pthread_create error");
return -1;
}
sleep(5); // 休眠5秒,5秒后继续向下执行
puts("end of main");
return 0;
}
void *thread_main(void *args)
{
while (1)
{
printf("子进程id %lu\n", pthread_self());
sleep(1);
}
return NULL;
}
$ gcc thread.c -o thread -lpthread
$ ./thread
子进程id 139657323562752
子进程id 139657323562752
子进程id 139657323562752
子进程id 139657323562752
子进程id 139657323562752
end of main
可与看到,5秒之后,主线程退出后,即整个进程退出后,子线程也就强制退出了。
推荐阅读