首页 > 解决方案 > sleep() 是否通过在等待结束时发送一些信号来唤醒进程?

问题描述

APUE 说sleep()

此函数sleep()导致调用进程暂停,直到

  1. 以秒为单位的挂钟时间量已经过去。
  2. 信号被进程捕获,信号处理程序返回。

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

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

暂停的进程只能被信号唤醒是否正确?这就是我有这个问题的原因。

谢谢。

标签: linuxlinux-kernelposixsleep

解决方案


Linux内核完全不需要使用用户信号来改变进程的状态。因此,发出信号只是为了满足用户库的功能要求。

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

暂停的进程只能被信号唤醒是否正确?

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


推荐阅读