Linux fork—进程控制

本文介绍了程序与进程的区别,强调程序是静态文件而进程是动态执行实体。详细讲解了fork函数在创建进程中的作用,以及fork返回值在父进程和子进程中的不同。通过示例代码展示了如何使用fork创建并打印父子进程ID,以及顺序创建多个进程。同时提到了进程ID(PID)和父进程ID(PPID)的获取方法。
摘要由CSDN通过智能技术生成

程序和进程

程序:是指编译好的二进制文件,在磁盘上,不占用系统资源(cpu、内存、打开的文件、设备、锁…)。
进程:是一个抽象的概念,与操作系统原理联系紧密,进程是活跃的程序,占用系统资源,在内存中执行(程序运行起来,产生一个进程)。

复制进程 fork

 用man命令查看fork方法

  pid_t fork(void);
  函数返回类型 pid_t 实质是 int 类型,Linux 内核 2.4.0 版本的定义是:

     fork 函数会新生成一个进程,调用 fork 函数的进程为父进程,新生成的进程为子进程。在父进程中返回子进程的 pid,在子进程中返回 0,失败返回-1。

     每个进程都有一个独特(互不相同)的进程标识符(process ID),可以通过 getpid() 函数获得,还有一个记录父进程 pid 的变量,可以通过 getppid() 函数获得变量的值。

fork 函数创建一个进程,其创建一个子进程。 

pid_t getpid(void);获取当前进程 ID

pid_t getppid(void);获取当前进程的父进程 ID

# 创建一个子进程
pid_t fork(void);
# 失败返回-1
# 成功返回:
# 1. 父进程返回子进程的ID(非负)
# 2. 子进程返回 0

1.打印父子进程id

fork getpid getppid的使用

# include<stdio.h>
# include<stdlib.h>
# include<unistd.h>
int main()
{
  pid_t pid ;
  pid = fork();
  if(pid<0)
  {
  	perror("fork error");
  	
  }
  else if(pid==0)
  {
  	printf("I am child pid =%d my father pid=%d\n",getpid(),getppid());
  }
  else
  {
  	printf("I am father pid =%d my father pid =%d\n",getpid(),getppid());
  }
  return 0;
}

 

 2.顺序打印5个进程

通过命令行参数指定创建进程的个数,每个进程休眠 1S 打印自己是第几个被创建的进程。

# include<stdio.h>
# include<stdlib.h>
# include<unistd.h>
int main()
{
  pid_t pid;
  int i;
  for(i=0;i<5;i++)
  {
  	pid =fork();
  	if(pid==0)
  	{
  	 break;
  	}
  }
  if(5==i)//父进程 等待for结束自己台跳出
  {
  	sleep(5);
  	printf("I am father\n");
  
  }
  else//子进程 提前break跳出 打印
  {
  	sleep(i);
  	printf("I am %d child \n",i+1);
  }

  return 0;
}

 

3.父子进程:

编写一个程序:

pid_t 类型表示进程 ID,但为了表示 -1,它是有符号整型。(0 不是有效进程ID, init最小,为1)

注意返回值,不是 fork 函数能返回两个值,而是 fork 后,fork 函数变为两个,父子需【各自】返回一个。

 

 

 

 

 

 

 

 

 

 

 

 

 注:父进程和子进程并发执行

这里有一篇博客写的非常好,转载一下:

(93条消息) Linux系统编程(1)——进程控制_进程控制编程_hhhcbw的博客-CSDN博客icon-default.png?t=N4P3https://blog.csdn.net/weixin_44491423/article/details/126521237

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值