【发布时间】:2016-10-18 08:35:38
【问题描述】:
我想知道是否所有信号都可能通过 Kill 命令发送到进程上。
我看过 Kill 和 Signal 的手册(第 7 节),但我不知道 Linux 中存在的信号是否都可以与 Kill 一起使用。
谢谢
【问题讨论】:
-
你能标出正确答案吗?
标签: linux bash shell command-line command
我想知道是否所有信号都可能通过 Kill 命令发送到进程上。
我看过 Kill 和 Signal 的手册(第 7 节),但我不知道 Linux 中存在的信号是否都可以与 Kill 一起使用。
谢谢
【问题讨论】:
标签: linux bash shell command-line command
是的,你可以。有很多方法。最简单的方法是:
kill -signalnumber pid1 pid2 ...
【讨论】:
是的,可以。
你可以这样使用它:
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.
还有很多关于信号的信息。 ;)
【讨论】:
我们可以通过 with 向进程发送信号
kill -signal pid1 [pid2 ... pidn]
杀死 -9 1379 3001
或者您可以通过名称向一组进程发送信号
killall -s 信号进程名
killall -s SIGTERM 火狐
但是,进程如何使用信号取决于这个信号是否在同一个用户空间中,以及信号是否可以被进程捕获。
我们有很多可能的信号,手动捕捉或忽略等,必须有人参与。
但是其他的,取决于你如何编程来响应信号。
【讨论】:
kill能否发送信号没有直接关系,只是可能导致的影响。