信号_kill和pkill命令
kill和pkill命令
-
(1)为什么当进程收到某些信号是,会被终止呢?
-
1) 比如Ctrl+C 发送SIGINT给进程时
-
2)比如操作一个错误地址,内核发送SIGSEGV信号给进程时
-
3)比如Ctrl+\ 发送SIGQUIT信号给进程时
-
4)比如在命令行使用kill pid,默认发送SIGTERM信号给进程时。
-
因为你发送的这些信号的处理方式是终止,所以进程被终止掉了。
-
-
(2)kill命令
-
1)kill的作用
-
(a)kill -l :查询信号列表
-
(b)通过PID想进程发送一个信号
-
kill只是发送信号,至于进程会不会被终止,这就要看信号的处理方式,处理方式如果是终止,那么就会终止进程。所以进程是否会被信号终止,是由信号的处理方式来决定的,而不是kill命令,当初起名字的时候,如果把kill起名为send估计更好理解写,因为kill所起到的左右只是发送信号。
-
发送信号的完整格式:kill -信号编号 PID
-
信号编号写数字和宏名都可以。
-
如果不写明信号编号的话:kill PID,默认发送的是15(SIGTERM)信号,等于kill -SIGTERM PID 或者 kill -15 PID
-
只有发送15这个信号时才能省略信号编号,发送其他信号时必须写明信号编号。
-
-
(c)为什么kill发送15(SIGTERM)这个信号时,信号编号可以省略?
-
我们说每个信号都有自己的特有用途。当初定义15(SIGTERM)信号的目的就是专门给我们从命令行终端窗口,发送该信号去终止某个进程用的,也就是说如果你想在命令行使用kill命令去中断某个进程时,专用信号就是15。
-
其实一般只要默认处理方式是终止信号,我们都可以使用kill命令将其发送给某个进程,这些信号都可以将进程终止掉,但是既然每个信号有自己的专门用途,那么在命令行去终止某个进程时,我们最好是使用专门的SIGTERM信号。这样显得更专业些
-
为了方便我们使用,Linux允许发送15这个信号时,不设置信号编号,kill pid时会帮你默认发送这个信号。
kill -SIGINT PID 不能终止命令行终端,只能终止占用命令行终端的进程。
-
-
-
2)pkill
-
kill命令的兄弟,用法与kill差不多,只不过kill是按照PID来识别进程的,pkill是按照名字来识别进程的。
-
pkill -信号编号 名字 :pkill -SIGTERM a.out
-
同样的,如果不写明信号编号的话,默认发送的是15(SIGTERM)这个信号。
-
-