linux中的signal怎么使用

linux中的signal怎么使用,第1张

signal函数的定义很复杂,但是它的用法还是比较简单的,你记住它的两个参数就可以了。signal有两个参数sig和func,signal这个函数是用来接收信号并处理的,所以sig参数表示将要处理哪种类型的信号,而func参数是一个函数指针,用来指定信号的处理函数,也就是当程序接收到sig那个类型的信号后,就会调用func指针指向的函数。func指针的原型是:

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组合键来暂停进程的运行。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8402781.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-16
下一篇 2023-04-16

发表评论

登录后才能评论

评论列表(0条)

保存