第9章进程关系总结

1 进程组与进程组ID

 获取进程组ID

pid_t getpgrp()

pid_t getpgid(pid_t pid)

 设置进程组ID

int setpgid(pid_t pid,pid_t pgid)

2 会话
 一次登录期间产生的所有进程组都属于同一个会话,会话是进程组的集合

 通过setsid可以创建会话,调用setsid的进程不能是进程组的组长进程

 1)该进程将成为新会话首进程

 2)该进程成为新进程组的组长进程

 3)该进程没有控制终端

 为了保证调用setsid函数的进程不是组长进程,一般调用一次fork函数,然后将父进程终止,用子进程调用setsid(该子进程一定不是组长进程)

pid_t setsid()

pid_t getsid(pid_t pid)

3 控制终端

 会话可以有控制终端

 如果会话有控制终端,则其包含的进程组中,有一个是前台进程组,其他的是后台进程组

 中断与退出信号只会发送给前台进程组进程 

 终端断开连接,则发送信号给控制进程(会话首进程)

 对于一个在filedes打开的控制终端,可以通过以下函数获取或设置前台进程组

pid_t tcgetpgrp(int filedes)

int tcsetpgrp(int filedes,pid_t pgrpid)

 也可以获取会话首进程

pid_t tcgetsid(int filedes)

4 作业控制

 作业控制允许在一个终端上启动多个作业(进程组),控制哪个作业可以访问终端,哪些作业在后台运行

 后台进程默认不可以从终端读,但是可以向终端写

 如果后台进程试图读终端,将产生SIGTTIN信号暂停后台进程,shell可以通过fg命令将后台进程送入前台运行,同时进程结束暂停继续运行

 

 

转载于:https://www.cnblogs.com/buptlyn/p/4143174.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值