系统调用创建子进程 --- fork基础认识

发布时间:2024年01月05日

一、fork的基本认识

输入指令:man 2 fork? 就可以看到fork的介绍( q 退出)

????????fork()的参数为空,作用是:在调用fork()之后,创建一个子进程,子进程与父进程共享fork()之后的代码,数据各自私有一份,采用的是写时拷贝。

? ? ? ? 返回值:父进程的返回值是子进程的pid,子进程的返回值是0。出错的话父进程返回-1,并且没有子进程被创建。?

#include<stdio.h>
#include<unistd.h>

int main()
{
    pid_t id = fork();
    printf("mypid is %d, fork() return %d\n", getpid(), id);                                                                                                    
    return 0;                                                                                                                         
}       

? ? ? ? 运行结果第一行是父进程的,它的pid是31243,fork()的返回值是子进程的pid;第二行是子进程的,它的pid是41244,fork()的返回值是0。

? ? ? ? 补充知识:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?1、getpid()可以获取当前进程的pid,getppid()可以获取当前进程的父进程的pid。? ? ? ? ? ? ? ? ? ? ? ? ? ?2、父子进程不一定谁先执行,并且他们都是到return结束或者用exit(退出码) 退出。

二、fork的使用

? ? ? ? 因为fork之后,父子的返回值不同,所以我们通常用if语句来让父子进程执行不同的任务。

#include<stdio.h>
#include<unistd.h>
#include<string.h>
#include<stdlib.h>

int main()
{
  pid_t id = fork();
  if(id < 0)
  {
    perror("fork fail");
    exit(-1);
  }
  else if (id == 0)
  {
    //子进程
    printf("I am child process\n");
    exit(0);//子进程退出
  }
  //父进程
  printf("I am parent process\n");

  return 0;
}

到此结束,感谢大家观看 !

文章来源:https://blog.csdn.net/m0_74626010/article/details/135403065
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。