linux下多线程中的fork介绍

本站所有内容来自互联网收集,仅供学习和交流,请勿用于商业用途。如有侵权、不妥之处,请第一时间联系我们删除!Q群:迪思分享

目录问题提出:情况(1)fork在创建子线程之前情况(2)fork在创建子线程之后情况(3)子线程中的fork结论:

问题提出:

回想一下:当一个程序只有主线程的时候调用fork,此时fork会创建出的子进程也会只有一条线程;

那要是把fork放入多线程的程序中呢?

我们来试验下:

情况(1)fork在创建子线程之前

代码:

#include <stdio.h> #include <pthread.h> #include <unistd.h> void* pthread_fun(void* arg) { printf(“fun = %dn”, getpid()); pthread_exit(NULL); } int main() { fork(); pthread_t id; pthread_create(&id, NULL, pthread_fun, NULL); printf(“main_pid = %dn”, getpid()); pthread_join(id, NULL); return 0; }

结果:fork出的子进程也会创建自己的子线程(两个进程:四个线程)

linux下多线程中的fork介绍插图

情况(2)fork在创建子线程之后

代码:

#include <stdio.h> #include <pthread.h> #include <unistd.h> void* pthread_fun(void* arg) { printf(“fun = %dn”, getpid()); pthread_exit(NULL); } int main() { pthread_t id; pthread_create(&id, NULL, pthread_fun, NULL); fork(); printf(“main_pid = %dn”, getpid()); pthread_join(id, NULL); return 0; }

结果:创建子线程之后,再创建子进程,此时fork的子进程只会执行fork之后的代码(两个进程:三个线程)

linux下多线程中的fork介绍插图1

情况(3)子线程中的fork

代码:

#include <stdio.h> #include <pthread.h> #include <unistd.h> void* pthread_fun(void* arg) { fork(); printf(“fun = %dn”, getpid()); pthread_exit(NULL); } int main() { pthread_t id; pthread_create(&id, NULL, pthread_fun, NULL); printf(“main_pid = %dn”, getpid()); pthread_join(id, NULL); return 0; }

结果:

linux下多线程中的fork介绍插图2

结论:

fork处于哪个线程中,fork后创建的子进程将以该线程作为自己的主线程,并且执行该线程之后的代码


© 版权声明
THE END
★喜欢这篇文章吗?喜欢的话,麻烦动动手指支持一下!★
点赞7 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容