APUE进程关系

pag214
登录简易流程:
  1. init进程fork子进程exec执行getty
  2. getty开启终端设备以便输入,显示Login:
  3. 用户输入用户名
  4. getty程序exec执行login程序
  5. login由用户名(getpwnam)获取pw结构,显示Password:
  6. 用户输入密码
  7. login程序比对pw结构中pw_passwd

pag218
进程组使一个或多个进程的集合,通常他们与同一作业相关联,可以接收来自统一终端的各种信号。

pid_t getpgrp(void);//返回调用进程的进程组ID
pid_t getpgid(pid_t pid);//返回pid进程的进程组ID(getpgid(0) = getpgrp())
int setpgid(pid_t pid, pid_t pgid);//加入现有组或创建一个新进程组
  1. pid=pgid, pid指定进程变成进程组组长
  2. pid=0, 使用调用者进程PID
  3. pgid=0, pid指定进程ID作为进程组ID

进程组:
每个进程组都可以有一个组长进程。组长进程的标识是,其进程组ID等于其进程ID
组长进程可以创建一个进程组,创建该组中的进程,然后终止。只要在某个进程组中有一个进程存在,则该进程组就存在,这与其组长进程是否终止无关
一个进程只能为他自己或他的子进程设置进程组ID。在他的子进程用了exec函数之一后,他就不能改变该子进程的进程组ID

pag219
会话是一个或多个进程组的集合。
pid_t setsid(void);//建立新会话

调用进程不是一个进程组的组长,此函数创建一个新会话:
  1. 该进程变成新会话首进程,并且是此时新会话中的唯一进程
  2. 该进程成为一个新进程组的组长进程。新进程组ID是该调用进程的进程ID
  3. 该进程没有控制终端。如在调用之前有,则联系中断

pid_t getsid(pid_t pid); //返回会话首进程的进程组ID


一个会话可以有一个控制终端。

建立与控制终端连接的会话首进程被称为控制进程


pid_t tcgetpgrp(int filedes);//返回前台进程组的进程组ID,该前台进程组与在filedes上打开的终端相关联
int tcsetpgrp(int filedes, pid_t pgrpid);//将前台进程组ID设置为pgrpid(同一会话中的进程组ID),filedes必须引用会话的控制终端
pid_t tcgetsid(int filedes);//获得会话首进程的进程组ID


pag229
孤儿进程组:
一个进程组不是孤儿进程组的条件是,该组中有一个进程,其父进程在属于同一会话中的另一组中。

父进程终止时,子进程被置入后台进程组中,shell所在进程组成为前台进程组(程序9-1)

习题9-2
#include
#include
#include
#include
#include

int
main(int argc, char *argv[])
{
    pid_t   pid, sid;

    printf("father\n");
    printf("gid:%d\n", getpgid(0));                                            
    printf("session fgid:%d\n", tcgetpgrp(STDOUT_FILENO));
    if ((pid = fork()) == 0) {
        sleep(2);
        sid = setsid();
        printf("\nchild\n");
        printf("gid:%d sid:%d\n", getpgid(0), sid);
        printf("session fgid:%d\n", tcgetsid(STDOUT_FILENO));
        exit(0);
    }
输出:

father
gid:5761
session fgid:5761
root@ubuntu:~/other#
child
gid:5762 sid:5762
session fgid:-1        (可知新会话无控制终端)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值