我需要了解在调用pause()函数时Unix中的进程会发生什么。
考虑具有三种状态的简单状态图:就绪,运行和等待。如果我的程序只打印它的pid而不是暂停,程序将无限期地等待"等待"州?
如果它while(1) { pause() }
,它将无限期地在"等待"状态呢?
答案 0 :(得分:2)
从联系手册:
pause()使调用进程(或线程)进入休眠状态,直到传递的信号终止进程或导致调用信号捕获函数。
因此程序可能无法无限期处于睡眠状态("等待",使用你的单词)。如果收到信号,它将离开该状态。但是,如果按照示例将pause()
调用封闭在一个紧密的无限循环中,程序将在收到信号后再次运行,但会立即返回休眠状态。
当在pause()
期间收到信号时,信号处理程序(如果有的话)将运行,并且一旦处理程序返回,控制将立即返回到pause()
系统调用之后的点。