进程控制:进程的创建和进程ID

本文介绍了进程的ID(PID)及其在进程创建时的分配,阐述了Linux系统下获取PID和父进程ID(PPID)的系统调用函数getpid()和getppid()。通过示例代码展示了如何使用fork()创建子进程,并输出父子进程的ID。进程创建的常见场景和操作系统创建进程的步骤也进行了说明,包括分配唯一标识、分配空间和初始化进程控制块等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

进程的ID

进程的ID,可称为PID。它是进程的唯一标识,类似于我们的身份证号是唯一标识,因为名字可能会和其他人相同,生日可能会与其他人相同……大多数的事件都可能会与其他人相同,而身份证号每个人都是不一样的,这是社会中自己的唯一标识。

当进程被创建的时候,系统就自动分配给进程一个唯一的PID,PID是正数。
在Linux中有两个系统调用函数,可以获取进程的ID。

  pid_t getpid(void); //获取进程ID(PID)
  pid_t getppid(void);//获取其父进程ID(PPID)

所需头文件

# include <sys/types.h>
# include <unistd.h>

getpid()返回的时调用该函数的进程的PID,getppid()返回的是调用该函数的进程的父进程ID(PPID),返回值类型是pid_t,实际上是无符号整型,这两个函数不会出现调用失败的情况

开始测试……

  //mycode.c文件
  1 # include <stdio.h>
  2 # include <sys/types.h>
  3 # include <unistd.h>
  4 
  5 int main(void)
  6 {
  7   //创建子进程
  8   pid_t id = fork();
  9   if(id == 0)
 10   {
 11     //子进程
 12   printf("i am child, my id is %d\n",getpid());
 13   }
 14   else{                                                                                                                                                         
 15   //父进程
 16   printf("i am parent, my id is %d\n",getppid());
 17   }
 18   return 0;
 19 }
   
//运行结果
i am parent, my id is 1593
i am child, my id is 7048

进程创建

【进程创建的主要事件】

  • 1、新的批处理作业
  • 2、由进程派生出一个进程
  • 3、因为提供服务而创建
  • 4、交互登录

操作系统创建进程包含的步骤

1、分配唯一的进程标识符
2、分配空间
3、初始化进程控制块(PCB)
4、修改连接
5、创建/扩充其他数据结构

对于“修改连接”,操作系统会把调度队列保存成某些数据结构,新的进程需要放置在数据结构里,所以需要重新连接。

在Linux系统中,可以创建新进程的系统调用函数只有一个fork

#include <unistd.h>
 pid_t fork(void);

描述:

fork()函数可以创建子进程,所需的头文件为unistd.h, 返回两次。

  • 如果返回的是0,则表示为子进程
  • 如果返回的是非0,则表示为父进程
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小酥诶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值