我如何知道 bash 终端是否挂起或者某个进程是否只是需要一段时间?

我如何知道 bash 终端是否挂起或者某个进程是否只是需要一段时间?

我和这家伙我以为是某个进程导致 bash 挂起,但实际上它只是花了一段时间。我运行了gem install berkshelf,幸运的是,该进程显示在活动监视器上,所以我知道它仍在运行,但有没有更可靠的方法来做到这一点?

答案1

实际上,你无法区分进程挂起和“只是花了一点时间”。进程响应信号,但没有到。

当进程“挂起”时,它可能陷入了无限循环,或者在等待某个永远不会发生的事件。但它也可能只是做了很多工作。

例如,执行密集工作的进程可能不会立即对Ctrl-CSIGINT终止信号)做出反应,但可能会稍后退出,甚至根本不退出。这通常是您发送 的情况SIGKILL,进程无法忽略它。

请注意,在整个情况下,实际的 shell(例如 Bash)永远不会挂起。简而言之,shell 只是执行进程并将其置于前台。您仍然可以暂停该进程并继续在后台运行它(Ctrl-Z,然后bg)。您的 shell 仍将正常工作。

答案2

一个好办法是在详细模式下运行需要很长时间的进程。这样你可以看到进度,如果挂起,你就知道问题出在哪里,并(希望)能够解决问题。此外,(默认情况下,使用stty saneCtrl+C发送SIGINT,但Ctrl+Z发送SIGTSTP

相关内容