0

我需要了解 Unix 中的进程在调用 pause() 函数时会发生什么。

考虑一个具有三种状态的简单状态图:就绪、运行和等待。如果我的程序只打印它的 pid 而不是暂停,程序会无限期地处于“等待”状态吗?

如果是这样while(1) { pause() },它也会无限期地处于“等待”状态吗?

4

1 回答 1

2

从手册页:

pause() 导致调用进程(或线程)休眠,直到发出终止进程或导致调用信号捕获函数的信号。

所以程序可能不会无限期地处于睡眠状态(“等待”,用你的话)。如果收到信号,它将离开该状态。但是,如果pause()按照您的示例将调用封闭在一个紧密的无限循环中,则程序将在收到信号时再次运行,但会立即返回睡眠状态。

当在 期间接收到信号时pause(),信号处理程序(如果有)将运行,并且pause()一旦处理程序返回,控制将立即返回到系统调用之后的点。

于 2013-06-16T17:32:58.280 回答