Linux系统中进程之间可以通过信号进行通信。kill命令可以通过进程ID(即PID)给进程发信号,格式示例如下。当直接使用“kill <pid>”命令时,默认发送SIGTERM信号。
kill -<signal> <pid>
进程信号如下:
信号名称 | 值 | 描述 | |
SIGHUP | 1 | Hangup (POSIX) | 挂起 |
SIGINT | 2 | Interrupt (ANSI) | 中断;e.g.终端键入DELETE或ctrl+c按键 |
SIGQUIT | 3 | Quit (POSIX) | 结束运行;e.g.终端键入ctrl+\按键 |
SIGILL | 4 | Illegal instruction (ANSI) | 非法指令 |
SIGTRAP | 5 | Trace trap (POSIX) | Trace追踪 |
SIGABRT | 6 | Abort (ANSI) | abort()异常终止 |
SIGBUS | 7 | BUS error (4.2 BSD) | 硬件故障 |
SIGFPE | 8 | Floating-point exception (ANSI) | 浮点异常 |
SIGKILL | 9 | Kill, unblockable (POSIX) | 无条件终止 |
SIGUSR1 | 10 | User-defined signal 1 (POSIX) | 用户定义信号1 |
SIGSEGV | 11 | Segmentation violation (ANSI) | 段错误 |
SIGUSR2 | 12 | User-defined signal 2 (POSIX) | 用户定义信号2 |
SIGPIPE | 13 | Broken pipe (POSIX) | 管道破裂 |
SIGALRM | 14 | Alarm clock (POSIX) | 超过alarm()设置的时间 |
SIGTERM | 15 | Termination (ANSI) | 尽可能终止 |
SIGSTKFLT | 16 | Stack fault | 栈异常,默认终止进程 |
SIGCHLD | 17 | Child status has changed (POSIX) | 子进程状态改变 |
SIGCONT | 18 | Continue (POSIX) | 使暂停进程继续运行 |
SIGSTOP | 19 | Stop, unblockable (POSIX) | 无条件停止运行,但不终止 |
SIGTSTP | 20 | Keyboard stop (POSIX) | 停止或暂停,但继续在后台运行;e.g.ctrl+z |
来看看kill命令的使用示例,如下图,“./simple_test &”后台运行程序,ps l命令可以看到该程序的PID=5482,“kill 5482”给该进程发送SIGTERM信号尽可能终止,程序被终止成功。
下面示例是./执行程序后键入ctrl+z按键,使程序暂停但继续在后台运行。此时发送SIGTERM信号尽可能终止该进程失败,发送SIGKILL信号无条件终止进程成功。从中也可以看出两个信号的区别。
备注:图中"kill -SIGKILL 5517"等同于"kill -9 5517",前者对读者更友好一点。
使用kill命令需要注意权限问题。上面两个例子,bash所属用户与程序进程所属用户相同,所以可以直接发送信号。例如下图,普通用户给root用户PID=1的进程发送信号失败,提示"Operation not permitted"不允许操作。当然,最简单直接的就是切换为root用户,你想kill哪个进程就kill哪个进程。
标签:发信号,ANSI,POSIX,信号,Linux,进程,kill,终止 From: https://blog.csdn.net/starlight_0/article/details/140904346