【Linux】如何创建进程?

这篇具有很好参考价值的文章主要介绍了【Linux】如何创建进程?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

       🔥🔥 欢迎来到小林的博客!!
      🛰️博客主页:✈️林 子
      🛰️博客专栏:✈️ 小林的Linux之路
      🛰️社区 :✈️ 进步学堂
      🛰️欢迎关注:👍点赞🙌收藏✍️留言

fork函数是什么?

fork函数是一个系统调用接口,我们可以通过man 2 fork 查看它。

【Linux】如何创建进程?
而这个函数的作用就是创建一个子进程。接下来我们好好探索进程的创建。

fork创建进程

fork是一个创建子进程的函数。我们写一个程序来演示一下。

【Linux】如何创建进程?

然后我们编译运行。

我们会发现,打印了2次hello world。

【Linux】如何创建进程?

为什么会打印2次helloworld?因为fork函数它又新建了一个新的进程。这个新的继承继承了它的父进程。而fork的返回值。如果是子继承返回,会返回0。如果是父进程返回,会返回子进程的pid。如果进程创建失败,返回-1。

所以我们改造一下我们的程序。

【Linux】如何创建进程?

这个程序就把子进程和父进程分流了。如果是子进程,则输出 child process pis is 子进程的pid。如果是父进程则输出父进程的pid。为了方便观察,每次执行完睡眠一秒

我们编译执行

【Linux】如何创建进程?

我们会发现,父进程的pid是10967,子进程的pid是10968。我们可以来查看一下进程,输入命令: ps ajx | head -1 && ps ajx | grep "myprocess"查看

【Linux】如何创建进程?

我们发现,我们查看的时候会出现多列数据。第一列代表管理进程的pid,就是管理当前进程的进程的pid。第二列是当前进程的pid,第三列是父进程的pid。

那么我们kill -9 10968,杀掉子进程看看。

我们杀掉子进程后,就只有父进程再运行了,所以只输出father process。

【Linux】如何创建进程?

这也可以说明,这个程序是有2个进程再执行的。那么这时候就有疑问了。

两个返回值

这时候我们就有疑问了,为什么fork函数有2个返回值?明明只调用了一次,而2个pid的值却互不相同。

要搞清楚这个问题,我们要先弄清楚,fork创建一个新进程。这个新进程的数据是从哪来的?

再上篇进程概念我提到过,**进程 = 描述进程的结构体 + 数据代码 ** 。那么fork创建进程的时候,这个新进程的内容,是怎么来的呢?

子进程的数据来源

子进程的数据来源

我们上面打印了2次hello word。就证明了,子进程和父进程的数据和代码是共享的。前提是进程的数据在后续不会发生修改!如果发生修改,那么父进程的数据会发生一次实时拷贝,随后把拷贝的代码数据交给子进程!

所以: 当进程里数据没有发生修改时。那么子进程和父进程共享代码和数据!如果有一个进程的数据发送了修改,那么会对数据发送写实拷贝,而代码依旧是共享的

【Linux】如何创建进程?

如果发生修改,那么父进程的代码数据会进行一份实时拷贝,给子进程。

【Linux】如何创建进程?

子进程结构体来源

子进程结构体来源

那么fork创建的子进程,描述它的结构体是怎么来的呢?

是根据父进程结构体模板初始化来的。

如何理解这句话,打个比方。你爸爸生出了你,那你的数据怎么来的?假如你爸爸姓王,那么你肯定也姓王。所以你的数据是根据你爸爸的模板来起的。所以这里的子进程也是一样的,它的结构体数据是根据它的父进程初始化的。但肯定也不是一模一样,pid,ppid…肯定都是子进程独有的。

为什么会有2个返回值?

现在我们再回到之前的问题,为什么fork会返回两个值?我们不不妨这样子想,当一个函数执行到return的时候。那么它的功能是不是都已经执行完了?功能都执行完了,就意味着子进程在fork函数return之前就已经创建好了,既然子进程已经创建好了,那么就会继承父进程的代码和数据。那么父进程的程序计数器也会被继承下来,这就意味着子进程也有一个fork函数,并且能返回一个值回去。

所以子进程也会发生return操作。而我们的一个父进程是可以有多个子进程的,那么父进程就要通过子进程的pid来找到子进程,所以fork函数会给父进程返回子进程的pid。而子进程一定只有一个父进程,可以直接通过ppid找到父进程,所以并不需要返回父进程的pid,所以fork函数会给子进程返回0。

父进程给子进程的返回值是0,子进程给父进程返回其pid值(大于0),创建失败返回-1(小于0)。

所以,接收fork返回值的变量也是数据,但fork给子进程和父进程返回的值均不相同,所以这里也会发生一次写实拷贝。

0,子进程给父进程返回其pid值(大于0),创建失败返回-1(小于0)。

所以,接收fork返回值的变量也是数据,但fork给子进程和父进程返回的值均不相同,所以这里也会发生一次写实拷贝。

总结

1.子进程是由父进程的模板创建的
2.子进程和父进程一般情况下共享代码和数据,但如果有一方的数据或代码被修改,那么操作系统会写实拷贝一份。
3.fork函数不是真的有2个返回值,而是两个进程都在fork函数执行了返回操作。
4.fork返回父进程子进程的PID,给子进程返回0,进程创建失败返回-1文章来源地址https://www.toymoban.com/news/detail-440995.html

到了这里,关于【Linux】如何创建进程?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • linux入门之进程控制(上)进程创建,进程等待

    目录 一、进程创建 1.fork函数 2.fork函数返回值 3.写时拷贝 4.fork常规用法 5.fork调用失败原因 二、进程终止 1.进程退出场景 2.进程常见退出方法 2.1_exit函数(直接调用内核) 2.2 exit函数 2.3return退出 三、进程等待 1.进程等待必要性 2.进程等待方法 2.1 wait方法 2.2 waitpid方法 2.3获取

    2024年02月12日
    浏览(56)
  • 【Linux从入门到放弃】进程概念、查看进程、创建进程

    🧑‍💻作者: @情话0.0 📝专栏:《Linux从入门到放弃》 👦个人简介:一名双非编程菜鸟,在这里分享自己的编程学习笔记,欢迎大家的指正与点赞,谢谢!   那在还没有学习进程之前,就问大家,操作系统是怎么管理进行进程管理的呢?很简单,先把进程描述起来,再

    2024年02月12日
    浏览(43)
  • 【Linux】Linux进程控制 --- 进程创建、终止、等待、替换、shell派生子进程的理解…

    柴犬: 你好啊,屏幕前的大帅哥or大美女,和我一起享受美好的今天叭😃😃😃 1. 在调用fork函数之后, 当执行的程序代码转移到内核中的fork代码后 ,内核需要分配 新的内存块 和 内核数据结构 给子进程, 内核数据结构包括PCB、mm_struct和页表,然后构建起映射关系 ,同时

    2024年01月16日
    浏览(58)
  • 【Linux】进程创建

    在linux中fork函数时非常重要的函数,它从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。 进程调用fork,当控制转移到内核中的fork代码后,内核做: 分配新的内存块和内核数据结构给子进程 将父进程部分数据结构内容拷贝至子进程 添加子进程到系统进程

    2024年02月06日
    浏览(37)
  • 【Linux】进程控制(创建、终止、等待)

    环境:centos7.6,腾讯云服务器 Linux文章都放在了专栏:【 Linux 】欢迎支持订阅 相关文章推荐: 【Linux】冯.诺依曼体系结构与操作系统 【Linux】进程理解与学习Ⅰ-进程概念 【Linux】进程理解与学习Ⅱ-进程状态 【Linux】进程理解与学习Ⅲ-环境变量 【Linux】进程理解与学习Ⅳ

    2023年04月16日
    浏览(60)
  • Linux进程控制【创建、终止、等待】

    ✨个人主页: Yohifo 🎉所属专栏: Linux学习之旅 🎊每篇一句: 图片来源 🎃操作环境: CentOS 7.6 阿里云远程服务器 Good judgment comes from experience, and a lot of that comes from bad judgment. 好的判断力来自经验,其中很多来自糟糕的判断力。 进程 创建后,需要对其进行合理管理,光靠

    2024年02月02日
    浏览(66)
  • 【Linux初阶】进程的相关概念 | 进程管理 & 查看进程 & 获取进程标识符 & fork进程创建

     🌟hello,各位读者大大们你们好呀🌟 🍭🍭系列专栏:【Linux初阶】 ✒️✒️本篇内容:进程的概念,进程管理初识(描述、管理进程),查看进程的基础方法,获取进程标识符(pid、ppid),fork进程创建(分流应用) 🚢🚢作者简介:计算机海洋的新进船长一枚,请多多

    2023年04月27日
    浏览(44)
  • 操作系统练习:在Linux上创建进程,及查看进程状态

    进程在执行过程中可以创建多个新的进程。创建进程称为“父进程”,新的进程称为“子进程”。每个新的进程可以再创建其他进程,从而形成进程树。 每个进程都有一个唯一的进程标识符(process identifier,pid)。在Linux中,init进程是所有其他进程的根进程。 在Linux中,可以

    2024年02月12日
    浏览(53)
  • 头歌(Linux之进程管理一):第2关:进程创建操作-fork

    任务描述 在上一关我们学习如何获取进程的 pid 信息,本关我们将介绍如何编程创建一个新的进程。 本关任务:学会使用 C 语言在 Linux 系统中使用 fork 系统调用创建一个新的进程。 相关知识 在 Linux 系统中创建进程有很多函数可以使用,其中包括了系统调用也包括库函数。

    2024年02月06日
    浏览(59)
  • [Linux]进程控制详解!!(创建、终止、等待、替换)

            hello,大家好,这里是bang___bang_,在上两篇中我们讲解了进程的概念、状态和进程地址空间,本篇讲解进程的控制!!包含内容有进程创建、进程等待、进程替换、进程终止!! 附上前2篇文章链接: Linux——操作系统进程详解!!(建议收藏细品!!)_bang___ba

    2024年02月15日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包