前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >父进程和子进程谁先运行?

父进程和子进程谁先运行?

作者头像
Jasonangel
发布2021-05-28 10:29:19
3.7K0
发布2021-05-28 10:29:19
举报

Linux中,父进程和子进程是并行运行的,先运行哪个是不确定的,在小红帽系统(Red Hat)中,先运行的是子进程,在ubuntu系统中,父进程是先运行的。

其实谁先运行不重要了,一般在编程中,把父进程当做守护进程使用,用一个waitpid(pid,&status,0) != pid 等待子进程的结束,父进程一直阻塞在这个函数中。阻塞或不阻塞跟第三个参数有关系。

举例

代码语言:javascript
复制
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

int main()
{
  pid_t pid;

  pid = fork();     // 创建进程
  if (-1==pid) {     // 创建进程失败
    printf("Error to create new process!\n");
    return 0;
  }
  else if (pid==0) {    // 子进程
    printf("Child process!\n");
  } else {      // 父进程
    printf("Parent process! Child process ID: %d\n", pid);
  }

  return 0;
}

结果(Ubuntu中):明显先打印了父进程

把父进程当做守护进程使用

代码语言:javascript
复制
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

int main()
{
  pid_t pid, pid_wait;
  int status;

  pid = fork();       // 创建子进程
  if (-1==pid) {       // 检查是否创建成功
    printf("Error to create new process!\n");
    return 0;
  }
  else if (pid==0) {      // 子进程
    printf("Child process!\n");
  } else {        // 父进程
    printf("Parent process! Child process ID: %d\n", pid);
    pid_wait = waitpid(pid, &status, 0);  // 等待指定进程号的子进程
    printf("Child process %d returned!\n", pid_wait);
  }

  return 0;
}

结果(Ubuntu中):父进程等待了子进程结束

如果喜欢我的文章,欢迎关注、点赞和转发,下面可以留言~~~

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-01-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 嵌入式Linux系统开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 举例
  • 把父进程当做守护进程使用
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档