“Killed”和“Terminated”的区别

21

我只是在测试使用休眠进程的断电保护标志。

首先我尝试用-15杀死它。

 xtechkid@ubuntu:~/Desktop/expermiments$ ps cax | grep 10005
 10005 pts/2    S+     0:00 sh
 xtechkid@ubuntu:~/Desktop/expermiments$ kill -15 10005

过程已终止

 xtechkid@ubuntu:~/Desktop/expermiments$ sh testscript.sh
 This is a script which sleeps for few seconds ..
 Terminated

然后我用-9把它杀死了

 xtechkid@ubuntu:~/Desktop/expermiments$ ps -ef | grep testscript.sh
 xtechkid 10059  9852  0 13:48 pts/2    00:00:00 sh testscript.sh
 xtechkid 10064 10007  0 13:48 pts/4    00:00:00 grep --color=auto testscript.sh
 xtechkid@ubuntu:~/Desktop/expermiments$ kill -9 10059

而且该进程被杀死了

 xtechkid@ubuntu:~/Desktop/expermiments$ sh testscript.sh
 This is a script which sleeps for few seconds ..
 Killed

有什么不同之处?

2个回答

43

'终止'信号,SIGTERM,是一个可以在程序中拦截的信号。通常后台运行的进程会捕获这个信号并启动关闭进程,以获得干净的退出。而'强制终止'信号,SIGKILL,则无法被拦截。当它被发送到一个进程时,该程序将会突然终止。

例如,当你关闭或重启计算机时,通常会先向正在运行的进程发送SIGTERM以允许它们以干净的方式退出(如果支持)。然后,在几秒钟后,对仍在运行的进程发送SIGKILL,以便强制释放正在使用的资源(例如正在使用的文件),并继续关机序列(例如卸载文件系统)。


11

终止:在关闭进程之前,它将存储所有数据(从RAM写入磁盘、日志等)。

杀死:更像是按下电脑电源和重置按钮。它不会保存任何日志或其他数据。


2
我喜欢这个关于PC电源和重置按钮的比喻。 - KY Lu
换句话说,terminate是优雅地退出,而kill则不是。 - Muhammad Ikhwan Perwira

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接