深入理解计算机系统第8章 异常控制流之二 信号

本文详细介绍了Unix系统的信号机制,包括信号术语、发送和接收信号的方式,如进程组、/bin/kill、键盘输入和kill函数。讨论了信号处理问题,如信号的默认行为、阻塞与取消阻塞,以及系统调用可能被中断的情况。同时,通过实例解释了如何避免并发错误,如在添加子进程和回收子进程之间同步信号,确保正确管理进程流程。
摘要由CSDN通过智能技术生成

8.5 信号

Unix信号:一种更高层的软件形式的异常,它允许进程中断其他进程.
在这里插入图片描述

1. 信号术语

发送一个信号到目的进程有两步:

  • 发送信号: 发送一个信号给目的进程.
  • 接收信号: 当目的进程被内核强制对信号的发送做出反应时,目的进程就接收了信号.

待处理信号:
一个只发出而没有被接收的信号叫做待处理信号。一种类型至多只会有一个待处理信号.
如果一个进程有一个类型为k的待处理信号,那么任何接下来发送到这个进程的类型为k的信号都不会排队等待,它们只是被丢弃.
一个进程也可以选择性地阻塞接收某种信号。一种信号被阻塞时,它仍可以被发送,饭产生的待处理信号不会被接收,直到目的进程取消对这种信号的阻塞.

2. 发送信号
1.进程组:

每个进程都只属于一个进程组, 默认地,一个子进程和它的父进程同属于一个进程组。
getpgrp: 获取当前进程的进程组ID
setpgid: 将进程pid的进程组改为pgid。若pid为0,就使用当前进程的pgid。若pgid为0,就用pid作为进程组ID.

#include <unistd.h>

pid_t getpgrp(void);    返回:调用进程的进程组ID

int setpgid(pid_t pid, pi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值