简介

kill发送一个特定的信号 (signal) 给进程id为pid的进程,根据该信号而做特定的动作,若没有指定,默认是送出终止 (TERM) 的信号

命令行

kill [-s signal|-p] [-q sigval] [-a] [--] pid...
kill -l [signal]

kill向指定进程或进程组发送指定的信号。如果没有指定,则发送TERM信号。TERM信号将终止没有捕获到该信号的进程。对于其他进程,可能需要使用KILL(9)信号,因为这个信号不能被捕获。

大多数现代shell都有一个内置的kill函数,其用法与这里描述的命令相当相似。‘-a’和’-p’选项以及通过命令名指定进程的可能性是本地扩展。

如果signal值为0,则不发送信号,但仍然进行错误检查。

使用信号的name时,不需要把SIG 加上,例如:

kill -HUP pidkill -KILL pid

参数说明

pid

指定信号要发送的进程id 列表。可以是以下值

  • n:大于0。进程id为 n 的进程。
  • 0:当前进程组的所有进程。
  • -1:进程id 大于 1的所有进程。
  • -n:当 n 大于 1,进程组n 内的所有进程都会被发送信号。当给出一个’-n’形式的参数时,它表示一个进程组,要么信号必须先指定,要么参数前必须有一个’–'选项,否则它将被视为要发送的信号。

-s, --signal

要发送的信号,可以是name或数字。

-l, --list

列出所有的信号name。如果指定的是信号数字,则返回信号name。

-L, --table

类似 -l , 列出所有的信号name和数字。

-a, --all

不要将commandname-to-pid转换 限制 为与当前进程具有相同uid的进程。而是所有 uid 下的进程。 这个主要针对的是commandname

-p, --pid

指定kill只打印指定进程的进程id (pid),而不发送任何信号。

-q, --queue

所有信号

 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

常用信号

  • 15) SIGTERM:正常方式杀死进程:(这种方式可能会存在一些问题:进程的子进程可能会无法终止,并继续消耗系统资源)
  • 9 )SIGKILL:强制杀死进程
  • 2) SIGINT:中断信号 相当Ctrl+C
  • 18) SIGCONT:挂起进程重新执行
  • 19) SIGSTOP:挂起进程,相当Ctrl+Z

kill -9kill -15的区别

当使用kill -15时,系统会发送一个SIGTERM的信号给对应的程序。当程序接收到该信号后,具体要如何处理是自己可以决定的。这时候,应用程序可以选择:

  • 立即停止程序

  • 释放响应资源后停止程序

  • 忽略该信号,继续执行程序

kill -15相比,kill -9就相对强硬一点,系统会发出SIGKILL信号,他要求接收到该信号的程序应该立即结束运行,不能被阻塞或者忽略。

JVMshutdownHookSIGTERM下有效,在 SIGKILL 下是无效的。

kill -2 也会触发。

Logo

更多推荐