返回顶部
首页 > 资讯 > 操作系统 >linux下多线程中的fork介绍
  • 735
分享到

linux下多线程中的fork介绍

linux多线程fork 2022-06-04 23:06:25 735人浏览 泡泡鱼
摘要

目录问题提出:情况(1)fork在创建子线程之前情况(2)fork在创建子线程之后情况(3)子线程中的fork结论:问题提出: 回想一下:当一个程序只有主线程的时候调用fork,此时fork会创建出的子进程也会只有一条线

目录
  • 问题提出:
    • 情况(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 = %d\n", getpid());
    	pthread_exit(NULL);
    }
    int main()
    {
    	fork();
    
    	pthread_t id;
    	pthread_create(&id, NULL, pthread_fun, NULL);
    	
    	printf("main_pid = %d\n", getpid());
    	pthread_join(id, NULL);
    
    	return 0;
    }
    

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

    在这里插入图片描述

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

    代码:

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

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

    在这里插入图片描述

    情况(3)子线程中的fork

    代码:

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

    结果:

    在这里插入图片描述

    结论:

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

    到此这篇关于linux下多线程中的fork介绍的文章就介绍到这了,更多相关linux多线程fork内容请搜索我们以前的文章或继续浏览下面

    的相关文章希望大家以后多多支持我们!

    --结束END--

    本文标题: linux下多线程中的fork介绍

    本文链接: https://lsjlt.com/news/21459.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • linux下多线程中的fork介绍
      目录问题提出:情况(1)fork在创建子线程之前情况(2)fork在创建子线程之后情况(3)子线程中的fork结论:问题提出: 回想一下:当一个程序只有主线程的时候调用fork,此时fork会创建出的子进程也会只有一条线...
      99+
      2022-06-04
      linux多线程fork
    • Linux下多线程下载工具MWget和Axel用法介绍
      这篇文章主要介绍“Linux下多线程下载工具MWget和Axel用法介绍”,在日常操作中,相信很多人在Linux下多线程下载工具MWget和Axel用法介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Lin...
      99+
      2023-06-12
    • Linux多线程中fork与互斥锁过程示例
      目录问题提出:(一)初次尝试(二)理性分析(三)解决问题(1)使用pthread_join()(2)使用phread_atfork()注册一个fork之前的判断问题提出: 我们有这样一个问题:在一个多线程程序中创建子进程...
      99+
      2022-06-04
      Linux多线程fork linux互斥锁过程
    • 多线程爬虫介绍
      一个进程里只有一个线程,我们称之为单线程爬虫。单线程爬虫每次只访问一个页面,不能充分利用电脑的网络带宽。一个页面最多也就几百KB,所以爬虫在爬取一个页面的时候,多出来的网速就浪费掉了。 而如果我们可以让爬虫同时访问10个页面,就相当于我们...
      99+
      2023-01-30
      爬虫 多线程
    • python多进程和多线程介绍
      目录一、什么是进程和线程 二、多进程和多线程 三、python中的多进程和多线程1、多进程2、多线程一、什么是进程和线程  进程是分配资源的最小单位,线...
      99+
      2024-04-02
    • 多线程中Future模式的详细介绍
      本篇内容介绍了“多线程中Future模式的详细介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在高性能编...
      99+
      2024-04-02
    • Android入门:多线程断点下载详细介绍
      本案例在于实现文件的多线程断点下载,即文件在下载一部分中断后,可继续接着已有进度下载,并通过进度条显示进度。也就是说在文件开始下载的同时,自动创建每个线程的下载进度的本地文件,...
      99+
      2022-06-06
      多线程 断点 线程 Android
    • C#中异步和多线程的区别介绍
      一、区别和联系 异步和多线程有什么区别?其实,异步是目的,而多线程是实现这个目的的方法。异步是说,A发起一个操作后(一般都是比较耗时的操作,如果不耗时的操作就没有必要异步了),可以继...
      99+
      2024-04-02
    • shell 多线程介绍与举例
      在Shell脚本中实现多线程通常可以使用以下几种方式: 后台执行:在Shell脚本中,你可以使用&符号将某个命令放在后台执行,这样可以同时执行多个命令,达到多线程的效果。例如: #!/bin/bashcommand1 &command2 &...
      99+
      2023-08-21
      linux bash 服务器
    • java多线程之Balking模式介绍
      Balk有拒绝,阻碍的意思。如果现在不适合执行这个操作,或者没必要执行这个操作,就停止处理,直接返回。这就是Balking模式。 Balking 模式可以和Guarded Suspe...
      99+
      2024-04-02
    • Java多线程之FutureTask的介绍及使用
      目录一、FutureTask的理解二、FutureTask类图三、FutureTask类中常用方法四、FutureTask类的使用示例一、FutureTask的理解 FutureTa...
      99+
      2024-04-02
    • Android多线程处理机制中的Handler使用介绍
      接下来让我介绍Android的Handler的使用方法。Handler可以发送Messsage和Runnable对象到与其相关联的线程的消息队列。每个Handler对象与创建它...
      99+
      2022-06-06
      android多线程 handler 线程 Android
    • C#多线程之取消架构介绍
      .NET 4.5 中包含取消架构,允许以标准方式取消长时间运行的任务。每个阻塞调用都应支持这种机制。但目前,并不是所有阻塞调用都实现了这个新技术。已经实现了这种机制的技术有任务(ht...
      99+
      2024-04-02
    • Python中线程锁的使用介绍
      目录前言方式一:使用try/finally,确保锁肯定会被释放。方式二:with语句避免使用try/finally。总结前言 当有多个线程,且它们同时访问同一资源时,需要考虑如何避免...
      99+
      2024-04-02
    • Linux 下的 /proc 目录介绍
      Linux 下的 /proc 目录介绍 目录 Linux 下的 /proc 目录介绍1、/proc 目录包含的文件及其作用2、/proc 目录包含的子目录及其内容(1)/proc/bus(2)...
      99+
      2023-09-06
      linux 运维 服务器
    • java多线程死锁问题的详细介绍
      本篇内容主要讲解“java多线程死锁问题的详细介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java多线程死锁问题的详细介绍”吧!一、什么是死锁当两个或两个...
      99+
      2024-04-02
    • JAVA多线程实现的三种方式介绍
      本篇内容主要讲解“JAVA多线程实现的三种方式介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JAVA多线程实现的三种方式介绍”吧!JAVA多线程实现方式主要有三种:继承Thread类、实现R...
      99+
      2023-06-02
    • CountDownLatch介绍和使用【Java多线程必备】
      点击 Mr.绵羊的知识星球 解锁更多优质文章。 目录 一、介绍 二、特性 三、实现原理 四、适用场景 五、注意事项 六、实际应用 一、介绍     CountDownLatch 是 Java 中的一个并发工具类,用于协调多个线程之间...
      99+
      2023-10-21
      java
    • C#线程的简单介绍
      本篇内容介绍了“C#线程的简单介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!C#线程是什么呢?在操作系统中一个进程至少要包含一个线程,然...
      99+
      2023-06-17
    • Java多线程的内置锁与显示锁介绍
      这篇文章主要讲解了“Java多线程的内置锁与显示锁介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java多线程的内置锁与显示锁介绍”吧!Synchronized内置锁获得锁和释放锁是隐式...
      99+
      2023-06-17
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作