我从人们那里收到很多混杂的消息,并且想知道它与您使用的内容是否真的没有太大区别。
kill 'x'
killall 'x'
kill -9 'x'
这些是到目前为止我被告知要使用的一些选项,但是有人说kill -9只是过大的杀伤力,单靠杀死是行不通的,等等。
在最标准的情况下(仅终止一个过程)(因此也包括它的状态),是否有人建议使用哪个?
[编辑]我在寻找要停止执行过程时要使用的内容,以便可以从头开始运行一个新的过程
我从人们那里收到很多混杂的消息,并且想知道它与您使用的内容是否真的没有太大区别。
kill 'x'
killall 'x'
kill -9 'x'
这些是到目前为止我被告知要使用的一些选项,但是有人说kill -9只是过大的杀伤力,单靠杀死是行不通的,等等。
在最标准的情况下(仅终止一个过程)(因此也包括它的状态),是否有人建议使用哪个?
[编辑]我在寻找要停止执行过程时要使用的内容,以便可以从头开始运行一个新的过程
Answers:
有许多信号的默认设置是终止该过程。最终的终止信号是SIGKILL,因为它无法处理,该过程别无选择,只能死亡。但是,这也意味着,如果您发送它,则该过程将失去清理的机会。因此,良好的举止要求发送诸如SIGTERM之类的信号,该信号可以首先处理,并且仅当该过程在一段时间后没有退出后才将其发送给SIGKILL。
请注意,SIGINT和SIGQUIT不是任意进程终止的良好候选者。由于它们可以从终端的键盘生成,因此许多应用程序将它们用于特殊目的。例如,python解释器使用SIGINT生成KeyboardInterrupt
异常(也在交互式python会话中,它仅返回到提示),而JVM使用SIGQUIT转储堆栈跟踪。SIGINT和SIGQUIT对于大多数标准命令行实用程序(例如find
或)仍然有效cat
。
在系统关闭期间,大多数UNIX和Linux系统都会将SIGTERM发送到所有进程,然后等待5秒钟,然后是SIGKILL。这是安全关闭任意进程的推荐方法。
还要注意,即使SIGKILL也可能无法终止陷入不间断等待中的进程,直到该进程唤醒。
kill -SIGTERM $pid; sleep 5; kill -SIGKILL $pid;
建议有参考吗?
SIGHUP
来自拨号线路普及的那一天。发送该信号以表明线路已挂断。后来,这种情况不太常见SIGHUP
,守护程序有时会使用它重新读取配置文件,而无需重新启动进程。在这些现代时代SIGHUP
很少使用。许多守护程序将具有自己的重新初始化方式(即apachectl graceful
或rndc reconfig
。对于不这样做的事情,应[init.d|smf|upstart|launchd]
尽可能使用控件。)
您应该从最温和的一个开始,然后从那里升级。这意味着SIGINT,SIGTERM,SIGQUIT,SIGKILL。虽然大多数人都跳过SIGINT和SIGQUIT。
SIGKILL
。