#include
#include
#include
int main(int argc, char ** argv)
{
union sigval value;
int signum = SIGTERM; // 默认发送SIGTERM
pid_t pid;
int i;
/*初始化*/
value.sival_int = 0;
/*检查参数的个数*/
if (argc != 3 && argc != 5 && argc != 7) {
printf("./send_data_signo <-d data> <-s signum> [-p][data]\n");
exit(1);
}
/*从命令行参数解析出信号编号、PID以及待传递的数据*/
for (i=1; i<argc; i++) {
if (!strcmp(argv[i], "-d")) {
value.sival_int = argv[i+1]; //指针指向参数中的字符串
continue;
}
if (!strcmp(argv[i], "-s")) {
signum = atoi(argv[i+1]);
continue;
}
if (!strcmp(argv[i], "-p")) {
pid = atoi(argv[i+1]);
continue;
}
}
/*利用sigqueue给pid发送信号signum,并携带数据value*/
if (sigqueue(pid, signum, value) < 0) {
perror("sigqueue");
exit(1);
}
return 0;
}
#include
#include
/*三参数的信号处理程序*/
void handler_sigint(int signo, siginfo_t *siginfo, void * pvoid)
{
printf("recv SIGINT, the data value is:%s\n",(char *) siginfo->si_ptr);
}
int main()
{
struct sigaction act;
/*赋值act结构*/
act.sa_sigaction = handler_sigint;
act.sa_flags = SA_SIGINFO; // 指定使用三参数的信号处理函数
/*安装信号处理函数*/
sigaction(SIGINT, &act, NULL);
while(1)
;
return 0;
}