最近工作中,有需要用到一个进程向另一个进程发信号.于是,写了一简单的例子:
一. 信号接受方
#include <stdio.h>
#include <signal.h>
static void sigaction_handle(int signum, siginfo_t * info, void * p)
{
printf("received signal/n");
printf("the int value is %d/n", info->si_int);
}
int main()
{
struct sigaction sa;
sigemptyset(&sa.sa_mask);
sa.sa_flags = SA_RESTART | SA_SIGINFO;
sa.sa_sigaction = sigaction_handle; //信号处理例程
sigaddset(&sa.sa_mask, SIGUSR2);
sigaction(SIGUSR2, &sa, NULL); //SIGUSR2 用户自定义的信号类型
printf("waiting for signal/n");
while(1)
{
sleep(2);
}
return 0;
}
二. 信号发送方
#include <stdlib.h>
#include <stdio.h>
#include <signal.h>
int main()
{
FILE * fp = NULL;
char buf[32];
pid_t pid;
sigval_t mysigval;
system("pidof 接受信号的进程> pid");
fp = fopen("pid", "r");
if(fp == NULL)
{
printf("fopen error/n");
return -1;
}
fgets(buf, sizeof(buf), fp);
pid = (pid_t)atoi(buf);
printf("pid:%d/n", pid);
mysigval.sival_int = 8;
if(sigqueue(pid, SIGUSR2, mysigval) == -1) //给指定进程发送信号
{
printf("send signal error/n");
}
fclose(fp);
return 0;
}