Linux 进程号和相关函数

本文介绍了进程的基本概念,包括进程号、父进程号和进程组号,以及相关的getpid、getppid和getpgid函数。此外,还详细讲解了进程的创建方法——fork函数及其子进程模型。
摘要由CSDN通过智能技术生成

进程号和相关函数

每个进程都由一个进程号来标识,其类型为 pid_t(整型),进程号的范围:0~32767。进程号总是唯一的,但进程号可以重用。当一个进程终止后,其进程号就可以再次使用。

在这里插入图片描述
接下来,再给大家介绍三个不同的进程号。

进程号(PID):

标识进程的一个非负整型数。

父进程号(PPID):

任何进程( 除 init 进程)都是由另一个进程创建,该进程称为被创建进程的父进程,对应的进程号称为父进程号(PPID)。如,A 进程创建了
B 进程,A 的进程号就是 B 进程的父进程号。

进程组号(PGID):

进程组是一个或多个进程的集合。他们之间相互关联,进程组可以接收同一终端的各种信号,关联的进程有一个进程组号(PGID) 。这个过程有点类似于
QQ 群,组相当于 QQ 群,各个进程相当于各个好友,把各个好友都拉入这个 QQ 群里,主要是方便管理,特别是通知某些事时,只要在群里吼一声,所有人都收到,简单粗暴。但是,这个进程组号和 QQ群号是有点区别的,默认的情况下,当前的进程号会当做当前的进程组号。

1.getpid函数

#include <sys/types.h>
#include <unistd.h>
​
pid_t getpid(void);
功能:
    获取本进程号(PID)
参数:
    无
返回值:
    本进程号

2.getppid函数

#include <sys/types.h>
#include <unistd.h>
​
pid_t getppid(void);
功能:
    获取调用此函数的进程的父进程号(PPID)
参数:
    无
返回值:
    调用此函数的进程的父进程号(PPID)

3.getpgid函数

#include <sys/types.h>
#include <unistd.h>
​
pid_t getpgid(pid_t pid);
功能:
    获取进程组号(PGID)
参数:
    pid:进程号
返回值:
    参数为 0 时返回当前进程组号,否则返回参数指定的进程的进程组号

示例程序:

int main()
{
    pid_t pid, ppid, pgid;
​
    pid = getpid();
    printf("pid = %d\n", pid);
​
    ppid = getppid();
    printf("ppid = %d\n", ppid);
​
    pgid = getpgid(pid);
    printf("pgid = %d\n", pgid);return 0;
}

在这里插入图片描述

进程的创建

系统允许一个进程创建新进程,新进程即为子进程,子进程还可以创建新的子进程,形成进程树结构模型。

#include <sys/types.h>
#include <unistd.h>
​
pid_t fork(void);
功能:
    用于从一个已存在的进程中创建一个新进程,新进程称为子进程,原进程称为父进程。
参数:
    无
返回值:
    成功:子进程中返回 0,父进程中返回子进程 ID。pid_t,为整型。
    失败:返回-1。
    失败的两个主要原因是:
        1)当前的进程数已经达到了系统规定的上限,这时 errno 的值被设置为 EAGAIN。
        2)系统内存不足,这时 errno 的值被设置为 ENOMEM。

示例代码:

int main()
{
    fork();
    printf("id ==== %d\n", getpid());   // 获取进程号  return 0;
}

运行结果如下:

在这里插入图片描述
从运行结果,我们可以看出,fork() 之后的打印函数打印了两次,而且打印了两个进程号,这说明,fork() 之后确实创建了一个新的进程,新进程为子进程,原来的进程为父进程。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

白小白的学习笔记

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

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

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

打赏作者

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

抵扣说明:

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

余额充值