Linux的kill信号略说
2015年08月20日
因为需要ping命令的统计输出,也就是Linux上Ctrl+C之后的倒数2行数据,所以要使用Shell模拟键盘的Ctrl+C,最后发现kill -2可以完成做这个事情。顺带看了下Linux的信号机制。记下备查。
需要的输出如下:
...
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 53.496/60.486/67.477/6.994 ms
信号的调用方法
向来只知道kill默认是-15参数,-9参数是强制杀死进程。这次专门看了Linux的信号功能,有一些以后可能也会用到。kill命令可以用来向进程发送信号,也可以使用如下的系统调用或者库函数来发送信号:
- raise 向线程自己发送信号
- kill 向指定的单个进程、多个进程或者系统上的所有进程发送信号
- killpg 向指定进程组内的进程号发送信号
- pthread_kill 向同一进程中的指定POSIX线程发送信号
- tgkill 向指定进程中的指定线程发送信号。
- sigqueue 向指定进程发送一个带数据的实时信号
信号列表
具体还有如下这些标准的信号可以用,列表如下:
信号 | 值 | 默认动作 | 描述 |
IGHUP | 1 | Term | 终端挂起或者控制进程终止 |
SIGINT | 2 | Term | 键盘终端,如按下break。按下ctrl+c也是发送该信号 |
SIGQUIT | 3 | Core | 键盘的退出键键被按下 |
SIGILL | 4 | Core | 非法指令 |
SIGABRT | 6 | Core | 放弃,由abort(3)发出的退出指令 |
SIGFPE | 8 | Core | 浮点异常 |
SIGKILL | 9 | Term | kill信号 |
SIGSEGV | 11 | Core | 无效的内存引用,段错误 |
SIGPIPE | 13 | Term | 管道破裂: 写入一个没有读端口的管道 |
SIGALRM | 14 | Term | 由alarm(2)发出的信号 |
SIGTERM | 15 | Term | 终止信号 |
SIGUSR1 | 30,10,16 | Term | 用户自定义信号1 |
SIGUSR2 | 31,12,17 | Term | 用户自定义信号2 |
SIGCHLD | 20,17,18 | Ign | 子进程结束信号 |
SIGCONT | 19,18,25 | Cont | 进程继续(曾被停止的进程) |
SIGSTOP | 17,19,23 | Stop | 终止进程 |
SIGTSTP | 18,20,24 | Stop | 控制终端(tty)上按下停止键 |
SIGTTIN | 21,21,26 | Stop | 后台进程企图从控制终端读 |
SIGTTOU | 22,22,27 | Stop | 后台进程企图从控制终端写 |
对于上面列表中的默认动作一列,解释如下:
- Term 默认行为是终止进程
- Ign 默认会忽略信号,将该信号丢弃,不做处理
- Core 缺省的动作是终止进程并进行内核映像转储(dump core)
- Stop 会停止进程,进入停止状况以后还能重新进行下去
- Cont 如果进程已经停止,会继续开始执行
通过执行man -7 signal查看man手册,可以看到更详细的内容!
参考文档:
http://www.cnblogs.com/hoys/archive/2012/08/19/2646377.html
http://man7.org/linux/man-pages/man7/signal.7.html
当前暂无评论 »