kill命令

kill命令

kill命令向指定的pid进程发送信号,若是不指定要发送的signal信号,则默认状况下signalSIGTERM,它会终止进程,要列出全部可用信号,可使用-l选项获取Linux信号列表,常用的信号包括HUPINTKILLSTOPCONT0,能够经过三种方式指定信号: 按数字例如-9,带有SIG前缀例如-SIGKILL,不带SIG前缀例如-KILL。负PID值用于指示过程组ID,若是传递了进程组ID,则该组中的全部进程都将接收到该信号,PID-1是特殊的,其指示除两个之外的全部进程,kill进程自己和initPID 1,其是系统上全部进程的父进程,将-1指定为目标会将信号发送到除这两个之外的全部进程。linux

语法

kill pid ...
kill {-signal | -s signal} pid ...
kill {-l | --list[=signal] | -L | --table}

参数

  • -signal, -s signal: 要发送的信号的名称、缩写名或编号,前面有破折号,例如-SIGTERM-TERM-15等,要查看可用信号的列表可使用kill -l
  • pid: 数字进程ID,若是不肯定某个进程的PID是什么,可使用ps命令将其列出例如ps -aux,一般会配合管道与grep使用例如查看nginx相关的进程 ps -aux | grep nginx
  • -l, --list[=signal]: 列出可用的信号名称,用-l--list列出全部信号名称,使用--list = signal,可将数字转换为其信号名称。
  • -L, --table: 在表格中列出可用的信号名称和编号。

信号

下列的某些信号是不能使用的,由于系统有可能不支持这些信号,或者这些信号已中断,详情能够实际查阅系统的kill -l命令。每一个系统都有信号13915,这些是最多见的信号。终止信号不只用于关闭锁定的应用程序,还能够阻止软件执行不容许的任务,这意味着其中一些终止信号是安全的一部分,另外kill命令不只中止/终止进程,并且还暂停,继续和从新启动进程。nginx

1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
 6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL     10) SIGUSR1
11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU     25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGIO       30) SIGPWR
31) SIGSYS      34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX
  • SIGHUP: SIGHUP信号用于断开进程与父进程的链接,这也能够用于从新启动进程,这对于内存泄漏的守护程序颇有用。
  • SIGINT: 该信号与按Ctrl+C相同,在某些系统上delete + break会向进程发送相同的信号,该进程被中断并中止,可是该进程自身能够忽略此信号。
  • SIGQUIT: 这相似于SIGINT,但因为QUIT字符一般是由Ctrl+\来控制,进程在收到SIGQUIT退出时会产生core文件, 在这个意义上相似于一个程序错误信号。
  • SIGILL: 当一个进程执行一个错误的、禁止的或未知的功能时,系统向该进程发送SIGILL信号,这是表明非法操做的信号。
  • SIGTRAP: 此信号用于调试目的,当某个进程执行了某个操做或知足了调试器正在等待的条件时,此信号将被发送到该进程。
  • SIGABRT: 该终止信号是停止信号,一般进程会在自身上发出此终止信号。
  • SIGBUS: 当一个进程被发送SIGBUS信号时,是由于该进程致使了一个总线错误,一般这些总线错误是因为进程试图使用假物理地址或进程的内存对齐设置不正确形成的。
  • SIGFPE: 被零除的进程使用SIGFPE终止。
  • SIGKILL: SIGKILL信号强制进程当即中止执行,程序不能忽略该信号,此过程也没法清除。
  • SIGUSR1: 这表示用户定义的条件,用户能够经过在sigusr1.c中编程命令来设置此信号。
  • SIGSEGV: 当应用程序有分段冲突时,这个信号被发送到进程。
  • SIGUSR2: 这表示用户定义的条件。
  • SIGPIPE: 当进程尝试写入缺乏与读取器链接的一端的管道时,此信号将发送到进程,读取器是在管道末端读取数据的过程。
  • SIGALRM: 当实时或时钟计时器到期时,将发送SIGALRM
  • SIGTERM: 该信号请求进程中止运行,该信号能够被程序自身忽略,该过程有时间正常关闭,当程序正常关闭时,这意味着它有时间保存进度并释放资源,换句话说即它不被迫中止。
  • SIGCHLD: 当父进程丢失其子进程时,将向父进程发送SIGCHLD信号,这将清理子进程使用的资源,子进程指的是由另外一个称为父进程的进程启动的进程。
  • SIGCONT: 要使进程在被SIGTSTPSIGSTOP信号暂停后继续执行,须要将SIGCONT信号发送到已暂停的进程,这是CONTiNUE SIGNAL,该信号对Unix做业控制执行后台任务颇有帮助。
  • SIGSTOP: 该信号使操做系统暂停进程的执行,进程自身不能忽略该信号。
  • SIGTSTP: 这个信号相似于按下Ctrl+Z,它向包含进程的终端发出请求,请求进程暂时中止,进程自身能够忽略该信号。
  • SIGTTIN: 当进程试图从tty终端读取数据时,进程接收到这个信号。
  • SIGTTOU: 当某个进程尝试向tty终端进行写操做时,该进程将收到此信号。
  • SIGURG: 当进程中有紧急数据要读取或数据很是大时,SIGURG信号将发送到该进程。
  • SIGXCPU: 当某个进程在分配的时间以后使用CPU时,系统将向该进程发送该信号,SIGXCPU的行为就像一个警告,该进程有时间保存进度(若是可能)并在系统使用SIGKILL终止该进程以前将其关闭。
  • SIGXFSZ: 文件系统对文件的大小有限制,当程序尝试违反此限制时,系统将发送该过程SIGXFSZ信号。
  • SIGVTALRM: SIGVTALRM在进程使用的CPU时间结束时发送。
  • SIGPROF: 当进程以及由系统表明进程使用的CPU时间过去时,将发送SIGPROF信号。
  • SIGWINCH: 当进程在更改其大小的终端中时,该进程将接收此信号。
  • SIGIO: SIGPOLL的别名或至少表现得很像SIGPOLL
  • SIGPWR: 电源故障将致使系统将该信号发送到进程,若是系统仍在运行。
  • SIGSYS: 为系统调用提供无效参数的进程将接收此信号。
  • SIGRTMIN*: 这是一组在系统之间变化的信号,它们被标记为SIGRTMIN + 1SIGRTMIN + 2SIGRTMIN + 3...,一般最多15个,这些是用户定义的信号,它们必须在Linux内核的源代码中进行编程。
  • SIGRTMAX*: 这是一组在系统之间变化的信号,它们被标记为SIGRTMAX-1SIGRTMAX-2SIGRTMAX-3...,一般最多14个,这些是用户定义的信号,它们必须在Linux内核的源代码中进行编程。
  • SIGEMT: 指示一个实现定义的硬件故障。
  • SIGINFO: 终端有时可能会向进程发送状态请求,发生这种状况时,进程也将收到此信号。
  • SIGLOST: 试图访问锁定文件的进程将收到此信号。
  • SIGPOLL: 当进程引发异步I/O事件时,会向该进程发送SIGPOLL信号。

示例

要显示全部可用信号,查看信号的详细信息可使用man命令,例如信号7 SIGBUS即便用man 7 signalgit

kill -l

在表格中列出可用的信号名称和编号。github

kill -L

终端断线,从新加载配置文件,平滑重启。shell

kill -1 111

通知进程关闭,使进程自行关闭,这个关闭是安全、干净地退出,若是kill命令后直接加进程的pid号默认选项为-15,这个信号是能够被进程自身忽略并继续执行自身的,即该信号是能够被阻塞和忽略的。编程

kill -15 111

强行中断当前程序的执行,相似Ctrl+C按键用以结束进程的结果,该信号是能够被阻塞和忽略的。安全

kill -2 111

退出进程,相似Ctrl+\按键用以结束进程的结果,该信号是能够被阻塞和忽略的。异步

kill -3 111

强行关闭进程,-9信号是无条件终止,这个信号不能被捕获或忽略,同时接收这个信号的进程在收到这个信号时不能执行任何清理,该信号是不能够被阻塞和忽略的,固然一般是不建议使用kill -9的,应该尝试使用-15以及-2给目标进程一个清理自身资源工做的机会,不要用收割机来修剪花盆里的花。操作系统

kill -9 111

暂停进程,对于暂停信号进程自身不能忽略该信号。unix

kill -19 111

激活进程,对于激活信号必须发送到已暂停的进程才有效。

kill -18 111

每日一题

https://github.com/WindrunnerMax/EveryDay

参考

https://www.computerhope.com/unix/ukill.htm
https://www.linux.org/threads/kill-commands-and-signals.8881/
https://www.geeksforgeeks.org/kill-command-in-linux-with-examples/
相关文章
相关标签/搜索