void (*func) (int)
所以信号的处理函数必须是一个返回void,只有一个int类型参数的函数。
比如如果程序需要处理Ctrl+C组合键产生的信号,就可以这样使用signal函数:
(void) signal(SIGINT, myfunc)
而myfunc函数可以这样定义:
void myfunc(int sig)
{
printf("Hello, the signal is %d\n", sig)
// 因为现在处理的是Ctrl+C信号,所以下面要
// 恢复程序对Ctrl+C的默认反应
(void) signal(SIGINT, SIG_DFL)
}
Linux/Unix中向一个进程发送信号用kill命令,不要以为kill命令只是用来杀死进程的,它可以发送各种信号给进程,杀死进程只是用到了其中的一个SIGKILL信号,kill命令的格式其实是这样的:kill 信号参数 进程PID
其中常见的信号参数(英文横杠加阿拉伯数字)有如下几个,更多的信号信息参考可以用man命令查看手册页(man 7 signal):
-1:这个参数代表SIGHUP信号,作用类似重新启动进程;
-2:这个参数代表SIGINT信号,作用相当于在命令行输入Ctrl+C组合键中断进程的运行;
-9:这个参数代表SIGKILL信号,代表强制中断进程;
-15:这个参数代表SIGTERM信号,表示正常的终止进程;
-17:这个参数代表SIGSTOP信号,相当于在终端输入Ctrl+Z组合键来暂停进程的运行。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)