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)这个信号。