Как изменить идентификатор группы процессов для процесса - PullRequest
0 голосов
/ 24 марта 2019

Я пытаюсь написать код, в котором сигнал должен передаваться ряду процессов (без использования простого цикла для отправки сигнала каждому процессу в отдельности).

Мой план состоял в том, чтобы установить для идентификатора группы процессов всех процессов тот же идентификатор, что и для процесса отправителя, а затем использовать 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;
}

Чего мне не хватает? Какие изменения мне нужно внести, чтобы процесс мог изменить свой собственный идентификатор группы процессов?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...