Linux--进程间关系
1.进程组
是一个或多个进程的集合。可以接收来自同一终端的各种信号。
每个进程组有一个唯一的进程组ID,每个进程组都可以有一个组长进程
进程组ID = 组长ID
只有某个进程组中一个进程存在,则改组就存在,与租场进程的终止无关系
进程:4302 4303
组长:4302 进程组中的第一个进程
kill pid:杀死组长,进程还在
&:表示放在后台执行
ctrl+c 退出不了
因为Ctrl+c通知的是前台进程组
ps的选项:
a:不仅列出当前的用户进程,也列出了其他用户的进程
x:不仅列有控制终端的进程,也列有无控制终端的进程
j:列出与作业控制相关的信息
2.作业:
shell分前后台来控制的不是进程而是作业或是进程组
一个前台作业可以有多个进程组成,一个后台作业也可以有多个进程组成,shell可以运行一个前台作业和任意多个后台作业。称为作业控制
一打开我们其实就运行了shell(bash)前台
作业与进程组的区别:若作业中的某个进程又创建了子进程,则子进程不属于作业。(父进程退出,作业退出,但是子进程并未退出)
我们杀死父进程,程序退出了,但是我们在ps看到子进程并未退出,这就说明子进程并不属于作业
在前台新起作业时,shell无法运行,因为被提到了后台,一旦我们的前台作业退出,shell又会被提到前台
3.会话
是一个或者多个进程组的集合,一个会话可以有一个控制终端
建立与控制终端连接的会话首进程被称为控制进程。首进程(bash)
一个会话中的几个进程组可被分为一个前台进程组和多个后台进程组。
因此,一个会话中,应该包括:控制进程(会话首进程),一个前台进程组和任意后台进程组
SID:就是会话id 那么4072到底是谁的呢?
我们可以看到是bash的,也就是会话首进程的,而他们的父进程也是bash
jobs:查看作业
fg 作业号:将此作业提到前台运行,若该作业后台的进程组是正在运行则提至前台运行,若为停止,则给进程组的每个进程发送SIGCONT信号使他继续运行
bg 作业号:将一个暂停的命令放入后台继续执行,发送了SIGCONT信号
Ctrl+z: 提到后台,发送SIGSTOP信号
Ctrl+c: 杀死整个作业
&:用在一个命令之后,表示后台运行