实现代码如下:
#include <signal.h>
#include <sys/types.h>
#include <unistd.h>
void new_op(int,siginfo_t*,void*);//处理函数
int main(int argc,char**argv)
{
struct sigaction act;
int sig;
sig=atoi(argv[1]);//将字符串转化为整型
sigemptyset(&act.sa_mask);
act.sa_flags=SA_SIGINFO;
act.sa_sigaction=new_op;
if(sigaction(sig,&act,NULL) < 0)
{
printf("install sigal error\n");
}
while(1)
{
sleep(2);
printf("wait for the signal\n");
}
}
void new_op(int signum,siginfo_t *info,void *myact)
{
printf("receive signal %d", signum);
sleep(5);
}
运行效果:先在一个终端上运行:./a 40 &
在另一个终端上运行kill -s 40 pid验证信号的发送接收及处理(pid指./a运行的pid)
每隔两秒出现:wait for the signal,如果此时输入kill -s 40 pid那么将出现receive signal 40
如果按下多次会出现多次receive signal 40,那么即可证明此信号是个可靠信号,执行了排队。