进程号|学习笔记

简介: 快速学习进程号

开发者学堂课程【物联网开发- Linux 高级程序设计全套视频进程号】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/660/detail/10984


进程号

 

内容简介:

一、进程号的内容

二、进程的分类

三、进程号的分类

四、输入代码及代码实现

 

一、进程号的内容

1、分配进程号

接下来讲一下进程控制,先讲进程号,创建一个进程之后,其实操作系统会给它分配一个进程号,以前学过一个命令叫 ps,

如以下代码:

[01_day]ps

PID TTY        TIME CMD

6044 pts/0      00:00:00 bash

6308 pts/0      00:00:00 ps

当ps时它就会打印所有进程的正在运行的进程的进程号。如果在以上代码加“ps-A”,是有好多进程在运行的,

如下图所示:

网络异常,图片无法展示
|
2、进程号的概念

每一个进程都会有一个进程号,进程号在操作系统当中是独一无二的,它用来标识正在运行的进程,就来代表正在运行的进程号,进程号就类似于身份证号,每一个人都有一个独一无二的身份证号,其用来代表这个人的,这就是在中国的ID,中国就相当于一个操作系统,然后每一个人都是一个进程,从出生到活着到死,这是进程号的意思。

每个进程都有一个进程号来标识,其类型是pid_t,可以认为是整形的,进程号的范围是0到32767,零号进程、一号进程、二号进程、三号进程等最多它的大小只能是32767进程,进程号总是唯一的,但进程号可以重用,这一点有点不一样,比如每个这一点都是一样的,进程号是唯一的,和人的身份证号唯一的是一样的,但身份证号不能重用,但是进程号可以重用,比如某一个进程死掉了之后,它的号是可以被回收重用,在现实生活当中身份证号是不能重用的,当进程终止以后,它的进程号就可以被再次使用了,然后用来代表别的进程,即新创建的进程,这是进程号可以重用,但前提是那个进程挂了,进程号被空出来了,才可以重用。

 

二、进程的分类

1、零进程和一进程

在Linux系统当中进程号由零号开始,进程号为0和1的进程是由内核创建的,这两个进程比较特殊,进程号为零的进程通常称为调度进程,它用于进程调度,这个进程实现了进程的调度,其常又被称为交换进程,这是零号进程被称为调度进程;

还有一个进程号为一,即一号进程,这个1号进程非常重要,通常被称为init进程,初始化进程除了零号进程以外,在Linux下面所有的进程都是由init进程直接或间接创建的,操作系统当中运行了好多进程都是一号进程的子子孙孙,由一号进程直接创建,或者是一号进程创建的子进程当中的子进程,比如说一号进程是老祖宗,现在可以先说明一下一号进程是init的初始化进程,即使将来会回头会讲孤儿进程,社会当中有很多孤儿,也就是说一号进程是所有孤儿进程的父进程,它收养所有的孤儿。

2、孤儿进程

那么什么叫孤儿进程?比如说进程没有父进程了,其父进程已经结束了,但是它还没有结束,这就被称为孤儿进程,即生它的那个进程已经结束了,一号进程是所有孤儿进程的父进程,比如在学信号的时候,通过信号可以杀死一个进程,以前的时候让学生先创建一个子进程,过一会再杀死子进程,他们有些就反其道而行,先获取父进程号,然后把它父进程杀了,然后子进程就变成孤儿了,然后被一号进程收养,接下来它再去给一号进程发信号,再去杀一号进程,把一号进程杀了之后,整个操作系统一下就崩了,所以一号进程是很重要的,初始化进程除了零号进程之外,其它的进程都是由一号进程直接或间接创建的,都是它的子子孙孙。

 

三、进程号的分类

1、父进程号

接下来再看一下进程号,这个概念已经讲了,即标识进程的一个非负整数。接着再看一下父进程号,任何进程都有父亲,除了init进程(零号进程和一号进程)之外,在程序当中叫父进程不叫母进程,任何进程都是由另外一个进程创建的,除了0和1那两个进程之外,那该进程被称为创建进程的父进程,对应的进程号称为父进程号,其实就是父亲的身份证号就是父亲的身份证号。

2、进程组号

进程组号是一个或多个进程的集合,相当于某一家族,然后他们之间相互关联,即进程和进程之间相互关联,进程组可以接收同一终端的各种信号,关联的进程组有一个进程组号,其实进程组号就相当于家族中老祖宗的进程号。当创建了一个进程之后,它肯定有父进程号,但是若自己创建一个进程组,那么自己就是老祖宗,后代的子子孙孙都认为你老祖宗,

举个例子:

在代码中输入“./my_cp”运行后,它接下来要启动一个进程,这个进程运行的时候,操作系统它一般会为此进程创建一个进程组,而当前的进程就是老祖宗,就是进程号,它的技能就是进程组号。

 

四、输入代码及代码实现

1、进程号代码

取进程号用getpid,获得父进程号用getppid,获得它的进程组号是getpgid,注意这三个函数都返回进程号,接下来看一下效果,如下代码:

例:01_pid.c

#include<stdio.h>

#include<sys/types.h>

#include<unistd.h>

int main(int argc, char *argv[])

{

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;

}

2、代码实现

(1)输入代码

看一下以上代码的效果,获取了之后打一下看效果,进程号这一块,演示一下,这个代码就是调上文中的三个函数,首先第一个函数是pid.c,在此当中它干了什么事?

getpid获得进程号,然后getppid获取当前进程的父进程号,getpgid获得进程组号,打此代码如下所示:

[01_day]1s

aaa.txt dest.txt my_cp my_cp.c read read.c test.txt wanqi.txt

[01_day]1s

aaa.txt dest.txt my_cp my_cp.c read read.c test.txt wanqi.txt

[01_day]gcc pid.c -o pid

[01_day]./pid

pid = 6334

ppid = 6044

pgid = 6334

(2)代码说明

该进程的进程号是6334,父进程号是6044,进程组号是6334,点斜杠运行一个进程的时候,操作系统为此进程创建一个进程组,这个进程组的组号就是此进程的进程号,它就是老祖宗,接下来点斜杠运行的子子孙孙都属于这个组,那它的子进程的进程组号就是这个,只不过现在还没有创建子子孙孙,还没来得及创建。

3、父进程代码

接下来看一下它的父进程,即6044,输入ps运行一下,代码如下所示:

[01_day]ps

PID TTY       TIME CMD

6044 pts/0      00:00:00 bash

6336 pts/0      00:00:00 ps

4、再次运行代码

(1)输入代码

看一下谁的账号是6044,即bash,那么点斜杠运行的进程是由谁创建的,即由shell命令显示器创建的,因为是在shell命令显示器里面去执行的进程程序。再次输入点斜杠运行,

代码如下:

[01_day]./pid

pid = 6339

ppid = 6044

pgid = 6339

(2)代码说明

可以看到过一会进程号就发生了改变,但是它的父进程号依然没变,依然是正在运行的bash,相当于bash刚才生了子进程,然后过了一会又生了个子进程,两个子进程代码一样,挂了其进程号,这是进程组号、父进程号、进程号,它会为这个进程创建一个进程组组,如果接下来在程序当中再去创建子进程,那些子进程的进程组号都是6339。

总结一下,所谓的进程号就是用来标识一个进程的,在操作系统当中独一无二,假如在一个操作系统中有一个进程号,代表某一个进程,那么另外一个操作系统也可以有这个进程号,代表别的进程,注意它是在操作系统当中是独一无二的,在这个操作系统里边,每一个进程号都是独一无二的代表了一个进程,别的电脑进程号可能此电脑的是一样的,但在此操作系统当中进程号是独一无二的,这是进程号的概念。

 

相关文章
|
Kubernetes Ubuntu Cloud Native
深入剖析Kubernetes学习笔记-05 | 白话容器基础(一):从进程说开去
深入剖析Kubernetes学习笔记-05 | 白话容器基础(一):从进程说开去
271 0
|
消息中间件 Shell Linux
计算机操作系统学习笔记(7)——进程通信
计算机操作系统学习笔记(7)——进程通信
186 0
|
Linux 调度
Linux学习笔记十一:进程管理
Linux学习笔记十一:进程管理
119 0
|
存储 安全 Linux
Go语言学习笔记-进程和线程
Go语言学习笔记-进程和线程
134 0
Go语言学习笔记-进程和线程
|
安全 算法 调度
411操作系统学习笔记——进程与线程、处理机调度、同步与互斥(PV操作)、死锁(四)
411操作系统学习笔记——进程与线程、处理机调度、同步与互斥(PV操作)、死锁
301 1
411操作系统学习笔记——进程与线程、处理机调度、同步与互斥(PV操作)、死锁(四)
|
算法 调度 C++
410操作系统学习笔记——进程与线程、处理机调度、同步与互斥(PV操作)、死锁(三)
410操作系统学习笔记——进程与线程、处理机调度、同步与互斥(PV操作)、死锁
483 1
410操作系统学习笔记——进程与线程、处理机调度、同步与互斥(PV操作)、死锁(三)
|
算法 调度
409操作系统学习笔记——进程与线程、处理机调度、同步与互斥(PV操作)、死锁(二)
409操作系统学习笔记——进程与线程、处理机调度、同步与互斥(PV操作)、死锁
611 1
409操作系统学习笔记——进程与线程、处理机调度、同步与互斥(PV操作)、死锁(二)
|
存储 消息中间件 程序员
408操作系统学习笔记——进程与线程、处理机调度、同步与互斥(PV操作)、死锁(一)
408操作系统学习笔记——进程与线程、处理机调度、同步与互斥(PV操作)、死锁
893 1
408操作系统学习笔记——进程与线程、处理机调度、同步与互斥(PV操作)、死锁(一)
|
Linux
计算机操作系统学习笔记(6)——进程和线程
计算机操作系统学习笔记(6)——进程和线程
225 0
|
存储 算法 程序员
[计算机操作系统(慕课版)]第二章 进程的描述与控制(学习笔记)
[计算机操作系统(慕课版)]第二章 进程的描述与控制(学习笔记)

热门文章

最新文章