Tekkaman

导航

 

[进程组]

 1. getpgrp(), getpgid(0) 可获取进程组id, 进程组长的pid等于pgid. 如果进程组长exit, 则进程组依旧存在, 组内其它进程的组ID仍然是之前的ID, 即不存在进程组长了.

 2. fork()一个子进程后,子进程的组ID为父进程的组ID. 可以通过setpgid()来更改.

 3. shell 中执行一个后台命令, 则会创建一个进程&进程组

 4. shell 中执行一个前台命令, 则会创建一个进程&进程组, 如果有管道, 则所有的管道命令在同一个进程组

    5. 一个终端所有的前后台进程组的进程都有一个session中, 拥有相同的session id. 通过setsid()可以创建一个无终端的新会话.

  6. 从下图可以看到, bash的pid=pgid=sid, 显然bash就是一个session的头, 是bash提供了一个交互式的环境. 意即"终端退出" = "Session退出" 

  

 7. jobs不是一个可执行文件, 应该是bash内置的一个命令, bash在执行一个后台命令时,如&, 内部就会记录一个job. 所以jobs是bash的内部命令

  whereis find, 输出如下:

  

  whereis jobs, 输出如下:

  

  可见jobs并不是一个bin,而是bash的内置变量. 它并不根据PGID来统计,而是根据提交给bash的后台命令.

  

posted on 2013-09-26 11:34  Tekkaman  阅读(427)  评论(0编辑  收藏  举报