Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我需要了解 Unix 中的进程在调用 pause() 函数时会发生什么。
考虑一个具有三种状态的简单状态图:就绪、运行和等待。如果我的程序只打印它的 pid 而不是暂停,程序会无限期地处于“等待”状态吗?
如果是这样while(1) { pause() },它也会无限期地处于“等待”状态吗?
while(1) { pause() }
从手册页:
pause() 导致调用进程(或线程)休眠,直到发出终止进程或导致调用信号捕获函数的信号。
所以程序可能不会无限期地处于睡眠状态(“等待”,用你的话)。如果收到信号,它将离开该状态。但是,如果pause()按照您的示例将调用封闭在一个紧密的无限循环中,则程序将在收到信号时再次运行,但会立即返回睡眠状态。
pause()
当在 期间接收到信号时pause(),信号处理程序(如果有)将运行,并且pause()一旦处理程序返回,控制将立即返回到系统调用之后的点。