Я пытаюсь написать код, в котором сигнал должен передаваться ряду процессов (без использования простого цикла для отправки сигнала каждому процессу в отдельности).
Мой план состоял в том, чтобы установить для идентификатора группы процессов всех процессов тот же идентификатор, что и для процесса отправителя, а затем использовать kill(0,SIGUSR1)
для отправки сигнала всем процессам в группе. Но всякий раз, когда я пытаюсь выполнить системный вызов setpgid(0,pgid)
, он выдает ошибку: Could not change gid: Operation not permitted
.
Мои коды для этих двух процессов:
#include "cn.h"
// sender process
void sig_handler(int alrm)
{
printf("Signal Received\n");
}
int main(int argc, char const *argv[])
{
signal(SIGUSR1,sig_handler);
printf("%d\n",(int)getpgid(0)); //print the gid and wait before proceeding
getchar();
if(setpgid(0,100)<0)
{
perror("Could not change gid");
}
kill(0,SIGUSR1);
return 0;
}
А для процесса получения:
#include "cn.h"
void sig_handler(int alrm)
{
printf("Signal Received\n");
}
int main(int argc, char const *argv[])
{
signal(SIGUSR1,sig_handler);
int d;
scanf("%d",&d); //take input of the gid and then change it
if(setpgid(0,d)<0)
{
perror("Could not change gid");
}
while(1);
return 0;
}
Чего мне не хватает? Какие изменения мне нужно внести, чтобы процесс мог изменить свой собственный идентификатор группы процессов?