我从人们那里收到了很多混杂的信息,我想知道你们使用的东西是否真的没有太大区别。
kill 'x'
killall 'x'
kill -9 'x'
到目前为止,我被告知要使用这些选项,但有些人说kill -9 太过分了,kill 本身不起作用,等等。
有没有人对在终止进程(及其状态)的最标准情况下应该使用哪一个有任何建议?
[编辑]我正在寻找当您想要停止进程的执行以便您可以从头开始运行一个新的进程时使用什么
答案1
有许多信号的默认处理是终止进程。最终的终止信号是SIGKILL,因为它无法被处理,进程别无选择,只能死亡。然而,这也意味着如果您发送它,该进程将被剥夺清理的机会。因此,良好的礼仪要求发送一个可以首先处理的信号,例如 SIGTERM,并且仅当进程在一段时间后没有退出时才发送 SIGKILL。
请注意,SIGINT 和 SIGQUIT 不适合任意进程终止。由于它们可以从终端键盘生成,因此许多应用程序将它们用于特殊目的。例如,Python 解释器使用 SIGINT 来生成KeyboardInterrupt
异常(也在交互式 Python 会话中,它只是返回到提示符),而 JVM 使用 SIGQUIT 来转储堆栈跟踪。 SIGINT 和 SIGQUIT 对于大多数标准命令行实用程序(例如find
或 )仍然有效cat
。
在系统关闭期间,大多数 UNIX 和 Linux 系统都会向所有进程发送 SIGTERM,然后等待 5 秒,然后发送 SIGKILL。这是安全关闭任意进程的推荐方法。
另请注意,即使 SIGKILL 也可能无法终止陷入不间断等待的进程,直到该进程唤醒为止。
答案2
您应该从最温和的开始,然后逐步升级。这意味着 SIGINT、SIGTERM、SIGQUIT、SIGKILL。尽管大多数人都会跳过 SIGINT 和 SIGQUIT。