昔我往矣

Linux的kill信号略说

2015年08月20日

因为需要ping命令的统计输出,也就是Linux上Ctrl+C之后的倒数2行数据,所以要使用Shell模拟键盘的Ctrl+C,最后发现kill -2可以完成做这个事情。顺带看了下Linux的信号机制。记下备查。

signal

需要的输出如下:

...
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也是发送该信号
SIGQUIT3 Core键盘的退出键键被按下
SIGILL 4 Core非法指令
SIGABRT6 Core放弃,由abort(3)发出的退出指令
SIGFPE 8 Core浮点异常
SIGKILL9 Termkill信号
SIGSEGV11 Core无效的内存引用,段错误
SIGPIPE13 Term管道破裂: 写入一个没有读端口的管道
SIGALRM14 Term由alarm(2)发出的信号
SIGTERM15 Term终止信号
SIGUSR130,10,16Term用户自定义信号1
SIGUSR231,12,17Term用户自定义信号2
SIGCHLD20,17,18Ign 子进程结束信号
SIGCONT19,18,25Cont进程继续(曾被停止的进程)
SIGSTOP17,19,23Stop终止进程
SIGTSTP18,20,24Stop控制终端(tty)上按下停止键
SIGTTIN21,21,26Stop后台进程企图从控制终端读
SIGTTOU22,22,27Stop后台进程企图从控制终端写

对于上面列表中的默认动作一列,解释如下:

  • 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

当前暂无评论 »

添加新评论 »