【问题标题】:Command KILL can send all signals?命令 KILL 可以发送所有信号吗?
【发布时间】:2016-10-18 08:35:38
【问题描述】:

我想知道是否所有信号都可能通过 Kill 命令发送到进程上。

我看过 Kill 和 Signal 的手册(第 7 节),但我不知道 Linux 中存在的信号是否都可以与 Kill 一起使用。

谢谢

【问题讨论】:

  • 你能标出正确答案吗?

标签: linux bash shell command-line command


【解决方案1】:

是的,你可以。有很多方法。最简单的方法是:

kill -signalnumber  pid1 pid2 ...

【讨论】:

    【解决方案2】:

    是的,可以。

    你可以这样使用它:

    kill [options] <pid> [...]

    例子:

    kill -USR1 6127

    这将发送 USR1 信号以使用 pid 6127 进行处理

    否则带有信号编号:

    kill -9 6127

    所有这些都在 kill manual 中有详细说明,您可以在终端上输入man kill 看到它,输出将是这样的:

    名称 kill - 向进程发送信号

    概要 杀死 [选项] [...]

    描述 kill 的默认信号是 TERM。使用 -l 或 -L 列出可用信号。特别有用的信号包括 HUP、INT、 KILL、STOP、CONT 和 0。交替信号可以指定为三个 方法: -9、-SIGKILL 或 -KILL。负 PID 值可用于选择整个进程组;请参阅 ps 命令输出中的 PGID 列。 -1 的 PID 是特殊的;它表示除kill之外的所有进程 进程本身并初始化。

    您可以输入kill -l 来查看信号的简短列表,或者您可以使用man 7 signal 查看信号(7) 手册以查看带有说明的完整信号列表:

    标准信号 Linux 支持下面列出的标准信号。几个信号编号取决于架构,如“值”中所示 柱子。 (如果给出三个值,第一个通常是有效的 用于 alpha 和 sparc,中间一个用于 x86、arm 和大多数其他架构,最后一个用于 mips。 (parisc 的值 未显示;有关信号编号,请参见 Linux 内核源代码 那 架构。)A - 表示相应架构上不存在信号。)

       First the signals described in the original POSIX.1-1990 standard.
    
       Signal     Value     Action   Comment
       ──────────────────────────────────────────────────────────────────────
       SIGHUP        1       Term    Hangup detected on controlling terminal
                                     or death of controlling process
       SIGINT        2       Term    Interrupt from keyboard
       SIGQUIT       3       Core    Quit from keyboard
       SIGILL        4       Core    Illegal Instruction
       SIGABRT       6       Core    Abort signal from abort(3)
       SIGFPE        8       Core    Floating point exception
       SIGKILL       9       Term    Kill signal
       SIGSEGV      11       Core    Invalid memory reference
       SIGPIPE      13       Term    Broken pipe: write to pipe with no
                                     readers
       SIGALRM      14       Term    Timer signal from alarm(2)
       SIGTERM      15       Term    Termination signal
       SIGUSR1   30,10,16    Term    User-defined signal 1
       SIGUSR2   31,12,17    Term    User-defined signal 2
       SIGCHLD   20,17,18    Ign     Child stopped or terminated
       SIGCONT   19,18,25    Cont    Continue if stopped
       SIGSTOP   17,19,23    Stop    Stop process
       SIGTSTP   18,20,24    Stop    Stop typed at terminal
       SIGTTIN   21,21,26    Stop    Terminal input for background process
       SIGTTOU   22,22,27    Stop    Terminal output for background process
    
       The signals SIGKILL and SIGSTOP cannot be caught, blocked, or ignored.
    

    还有很多关于信号的信息。 ;)

    【讨论】:

      【解决方案3】:

      我们可以通过 with 向进程发送信号

      kill -signal pid1 [pid2 ... pidn]

      杀死 -9 1379 3001

      或者您可以通过名称向一组进程发送信号

      killall -s 信号进程名

      killall -s SIGTERM 火狐

      但是,进程如何使用信号取决于这个信号是否在同一个用户空间中,以及信号是否可以被进程捕获。

      我们有很多可能的信号,手动捕捉或忽略等,必须有人参与。

      但是其他的,取决于你如何编程来响应信号。

      【讨论】:

      • 进程捕获信号的能力与kill能否发送信号没有直接关系,只是可能导致的影响。
      • 完全同意你的看法。我的意图是详细说明。改写答案等待这个更一致。非常感谢您的建议。