fork()(約3子)でプロセスツリーを作成します。私はeasly kill(-getpgrp()、signal_number)を使ってそれらのすべてにシグナルを送ることができますが、sigqueueで同じことをする方法は?プロセスグループにシグナルを送るsigqueue()
sigqueue()関数は、プロセスまたはプロセスグループに信号を送りますが、kill()とは異なり、sigqueue()を使用してプロセスグループ全体にシグナルを送信することはできません。 pidの負の値。
どのようにするのですか?
EDIT:
コード:
s1.cは私 "キャッチ" の信号は、それらの制御を取るためのプログラムです。 したがって、(同じグループidを持つ)s1のカップルはsigqueue()からの信号を待ちます。あなたの実装が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仕様書](http://pubs.opengroup.org/onlinepubs/9699919799/functions/sigqueue.html)と[Linux man page](http://man7.org/linux/man-pages/man3/sigqueue .3.html)は、単一のプロセスだけがシグナルを送ることができると述べています。 –
[link](https://www.mkssoftware.com/docs/man3/sigqueue.3.asp)、こちらそれではどうしたらいいですか?可能です?多くの記事は、kill()とsigqueue()がかなり同じであることを教えてくれます... – Baal