sleep()是否在等待结束时通过发送一些信号来唤醒进程?

时间:2018-09-21 20:58:45

标签: linux linux-kernel posix sleep

APUE说关于sleep()

  

此功能sleep()导致调用进程被挂起   直到其中一个

     
      
  1. 以秒为单位指定的挂钟时间已过去。
  2.   
  3. 进程捕获了信号,信号处理程序返回。
  4.   

第一种情况是否通过向流程本身发送一些特定信号来起作​​用?如果是,信号是什么? alarm()可以在特定时间段后向呼叫进程发送信号SIGALARM,这就是为什么我想知道sleep()是否以相同的方式工作的原因。

sleep()是否将调用过程的状态更改为与sigsuspend()更改为相同的状态?这两个功能更改为哪个过程状态?

仅通过信号唤醒挂起的进程是否正确?这就是我有这个问题的原因。

谢谢。

1 个答案:

答案 0 :(得分:2)

Linux内核在使用用户信号来更改进程状态时绝对不需要。因此,仅出于满足用户库功能的要求而执行信号发射。

作为sleep函数的文档,它没有说在睡眠结束后会发出任何信号,因此内核在这种情况下不使用信号。

  

仅通过信号唤醒暂停的进程是否正确?

是的,用户代码可能仅通过向其发送信号来唤醒睡眠过程。对于大多数不可运行的过程状态也是如此。