第9章 进程关系

版权声明:转载请声明 https://blog.csdn.net/qq_40732350/article/details/82666429

请移步到这:

http://note.youdao.com/noteshare?id=1c335abb23c9b6b5ba97e26a02ceb711&sub=D91CCCB053284DBFB246E33C5E90EFDD

Linux-进程、进程组、作业、会话、控制终端详解

https://www.cnblogs.com/JohnABC/p/4079669.html

9.2 终端登录

这节很难理解:先阅读下面的博客

https://blog.csdn.net/summy_J/article/details/73870353

Linux中TTY是什么意思

终端是一种字符型设备,它有多种类型,通常使用tty来简称各种类型的终端设备。

http://blog.chinaunix.net/uid-8194676-id-2513202.html

9.3 网络登录

读不懂:

9.4 进程组

Linux-进程、进程组、作业、会话、控制终端详解

https://www.cnblogs.com/JohnABC/p/4079669.html

  1. 进程组是一个或多个进程的集合。
  2. 它们是在同一作业中结合起来的
  3. 同一进程组中的各进程接收来自同一终端的各种信号。(在后面可以用kill信号验证)
  4. 每个进程组有一个唯一的进程组ID.进程组ID类似于进程ID--它是一个正整数,并可存放在pidt数据类型中。

函数getpgrp返回调用进程的进程组ID.

每个进程组都有组长进程,组长进程ID = 进程组ID

进程组的生命周期是一个组员的建立,到最后一个组员的结束

setpgid函数将pid进程的进程组ID设置为pgid,

如果这两个参数相等,则由pid指定的进程变成进程组组长。

如果pid是0,则使用调用者的进程ID.

如果pgid是0,则由pid指定的进程ID用作进程组D。

注意:

一个进程只能为它自己或它的子进程设置进程组ID,

在它的子进程调用了exec后,它就不再更改该子进程的进程组ID.

在大多数作业控制shell中,在fork之后调用此函数,

父进程设置其子进程的进程组ID,同时子进程也设置其自己的进程组ID,这两个调用中有一个是冗余的,

但让父进程和子进程都这样做可以保证,在父进程和子进程认为子进程已进入了该进程组之前,这确实已经发生了。(说的什么玩意儿,逻辑不对)

如果不这样做,在fork之后,由于父进程和子进程运行的先后次序不确定,会因为子进程的组员身份取决于哪个进程首先执行而产生竞争条件。

在讨论信号时,将说明如何将一个信号发送给一个进程(由其进程ID标识)或发送给一个进程组(由进程组ID标识),类似地, 8.6节的waitpid函数可被用来等待一个进程或者指定进程组中的一个进程终止。

9.5 会话

Linux-进程、进程组、作业、会话、控制终端详解

https://www.cnblogs.com/JohnABC/p/4079669.html

9.6 控制终端

Linux-进程、进程组、作业、会话、控制终端详解

https://www.cnblogs.com/JohnABC/p/4079669.html

9.7 函数tcgetpgrp,tcsetpgrp,tcgetsid

9.8 作业控制

Linux-进程、进程组、作业、会话、控制终端详解

https://www.cnblogs.com/JohnABC/p/4079669.html

9.9 shell执行程序

猜你喜欢

转载自blog.csdn.net/qq_40732350/article/details/82666429