进程信号

信号基本概念

  1. ctrl+c产生的信号只能发给前台进程。一个命令后面加个&可以放到后台运行,这样shell不必等待进程结束就可以接受新的命令,启动新的程序
  2. Shell可以同时运⾏行一个前台进程和任意多个后台进程,只有前台进程才能接到像Ctrl-C这种控制键产⽣生的信号
  3. 前台进程在运⾏行过程中,用户随时可能按下Ctrl-C⽽而产⽣一个信号,也就是说该进程的⽤户空间代码执行到任何地⽅方都有可能收到SIGINT信号而终⽌,所以信号相对于进程的控制流程来说是异步(Asynchronous)的
    用kill -l可以看到系统定义的信号列表:
    这里写图片描述
    1-31 普通信号 、 34-64 实时信号
    部分进程默认处理信号的功能叫终止进程
    信号处理常见方式:
  4. 忽略此信号
  5. 执行该信号的默认处理动作(部分进程默认是终止进程)
  6. 自定义 提供一个信号处理函数

产生信号

  1. 通过终端按键产生信号:SIGINT的默认处理动作是终止进程,SIGQUIT的默认处理动作是终止进程并Core Dump(核心转储)。
  2. 调用系统函数向进程发信号 kill命令是调用kill函数实现的 。kill函数可以给指定的一个进程发送指定的信号。raise函数可以给当前进程发送指定的信号(自己给自己发信号)
  3. 由软件条件产生信号
    阻塞信号
    信号其他相关常见概念:
  4. 实际执行信号的处理动作称为信号的 递达(Delivery)
  5. 信号从产生到递达之间的状态,称为信号未决(Pending)
  6. 信号可以选择阻塞(Block)某个信号
    如果一个信号被Block,则一定不会被递达
    如果一个信号没有被Block但被Pending 不会立即递达,会在合适的时候

在内核中的表示:
这里写图片描述
三张表都和PCB有关
每个信号都有两个标志位分别表示 block和pending,还有一个函数指针表示处理动作。SIG_DFL:默认 SIG_IGN:忽略 User Space 自定义
每个信号只有一个bit未决标志,非0即1,阻塞标志也是这样表示,所以,未决和阻塞标志可以用sigset_t来存储,sigset_t称为信号集。阻塞信号集也叫当前进程的信号屏蔽字(signal Mask)
信号捕捉
4次用户-内核切换,四个焦点上方为用户,下方为内核。
相交线的焦点代表:信号检测 当进程从内核态返回到用户时,对信号进行检测以及处理

什么叫把进程挂起?(PCB挂起) 只要不是 R,X,Z,D 挂起不能被调度,只有R状态才能被调度。 答:把进程状态设置为T状态,把进程放到等待队列里。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值