进程组
在linux中,每一个进程还属于一个进程组,一个进程组有多个进程组成,通常,他们联合起来作业,可以接受从同一个终端下的各种信号。并且每一个进程组都有一个进程组ID。在Linux中叫做PGID,一个进程组由多个进程组成,进程组中有一个组长进程,组长进程的标识是他的进程ID和组ID相同。一般一个进程组中第一个创建的进程就是组长进程。一个进程组中只要还有一个进程存在,那么这个进程组就存在。
我们可以通过ps 命令,来查看进程信息。
-a 列出所有用户的进程
-x 不仅列出有终端控制的,也列出没有终端控制的进程。
-j列出与作业控制相关的信息
PID:进程ID
PPID:父进程ID
PGID:所属进程组的ID
SID:会话ID
TTY:相关控制终端
作业
Shell分前后台来控制的不是进程而是作业或者叫做进程组,Shell可以运行一个前台作业和任意多个后台作业,这就叫做作业的控制。
作业和进程组的区别:如果一个进程组中的某个进程fork出来了子进程,那么子进程属于进程组,而不属于作业。
现在我们就可以理解为什么当我们运行一个进程之后,再输入命令,就没有作用了,原因就是因为让我们启动一个作业以后,默认是放在前台的,而前台只能有一个进程,因此Shell就被提到后台了,无法接受我们的指令。
1 #include<stdio.h>
2 #include<unistd.h>
3 int main()
4 {
5 pid_t pid;
6 if(pid=fork()==0)
7 {
8 //child
9 while(1)
10 {
11 printf("hello, world\n");
12 sleep(2);
13 }
14