zu senden Ich erstelle Prozessbaum mit fork() (etwa 3 Kind). Ich kann einfach ein Signal an alle senden, indem ich kill (-getpgrp(), signal_number), aber wie mache ich dasselbe mit sigqueue? Die sigqueue() - Funktion sendet ein Signal an einen Prozess oder eine Gruppe von Prozessen, aber im Gegensatz zu kill() kann ich sigqueue() nicht verwenden, um ein Signal an eine ganze Prozessgruppe zu senden, indem a angegeben wird negativer Wert in pid.sigqueue() um ein Signal an die Prozessgruppe
Also, wie geht das?
EDIT:
Code:
s1.c ist ein Programm, in dem i "fangen" die Signale Kontrolle über sie zu übernehmen. Also wartet das Paar von s1 (mit der gleichen Gruppen-ID) auf das Signal von 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;
}
"Die' sigqueue() 'Funktion sendet ein Signal an einen Prozess ** oder eine Gruppe von Prozessen ** ..." Wo kann man mit 'sigqueue()' ein Signal senden? eine ganze Prozessgruppe? Die [POSIX-Spezifikation] (http://pubs.opengroup.org/onlinepubs/9699919799/functions/sigqueue.html) und [Linux-Manpage] (http://man7.org/linux/man-pages/man3/sigqueue .3.html) beide können nur einen einzigen Prozess signalisieren. –
[link] (https://www.mkssoftware.com/docs/man3/sigqueue.3.asp), hier. Ok, wie kann ich das machen? Es ist möglich? Viele Beiträge sagen mir, dass kill() und sigqueue() ziemlich gleich sind ... – Baal