【发布时间】:2017-01-20 02:51:51
【问题描述】:
我使用 fork() 创建进程树(大约 3 个孩子)。我可以通过 kill(-getpgrp(), signal_number) 轻松地向所有人发送信号,但是如何对 sigqueue 做同样的事情呢?
他们说,sigqueue() 函数向一个进程或一组进程发送信号,但与 kill() 不同,我不能使用 sigqueue() 通过指定负数来向整个进程组发送信号pid中的值。
那么该怎么做呢?
编辑:
代码:
s1.c 是一个程序,我在其中“捕获”信号以控制它们。 所以这对 s1(具有相同的组 id)等待来自 sigqueue() 的信号。
int main (int argc,char *argv[])
{
int i=0;
char *do=argv[1];
int b=atoi(argv[2]);
int y=fork();
if(argc !=3)
{
printf("wrong arg number\n");
exit(0);
}
do{
switch(fork())
{
case -1:
perror("error \n");
exit(1);
break;
case 0:
execl("s1","s1.c",argv[1],argv[2], NULL);
break;
default:
sleep(2);
break;
}
i++;
}
while(i<3);
sleep(2);
printf("ssignal %d send to gpid : %d\n",b,getpgrp());
union sigval value;
value.sival_int = 0;
value.sival_ptr = 0;
if(sigqueue(getpgrp(), b, value) == 0) {
printf("signal sent successfully!!\n");
} else {
perror("SIGSENT-ERROR:");
}
return 0;
while(wait(0) != -1){}
return 0;
}
【问题讨论】:
-
"
sigqueue()函数向一个进程或一组进程发送信号..." 你从哪里知道sigqueue()可以用来发送一个向整个进程组发出信号? POSIX specification 和 Linux man page 都只表示可以向单个进程发出信号。 -
link,在这里。好的,我该怎么做?有可能的?许多帖子告诉我,kill() 和 sigqueue() 非常相似......
标签: c linux unix signals sigqueue