мне нужно изменить PGID моего родительского процесса, так что я сделал что-то вроде этого:Невозможно изменить GID процесса
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define KIDS 10
int main()
{
struct timespec a = {10, 0};
int pid;
int* pids = (int*) calloc(KIDS, sizeof(int));
int argument = 0;
int procNumber;
for (procNumber = 0; procNumber < KIDS; procNumber++) {
pid = fork();
argument = procNumber;
if (pid == 0)
break;
pids[procNumber] = pid;
}
if (pid == 0) {
// child stuff
} else {
printf("My group: %d\n", getpgrp());
if (setpgid(0, 6654) == -1)
perror("setpgid() error:");
printf("My new group: %d\n", getpgrp());
}
nanosleep(&a,NULL);
free(pids);
return 0;
}
И я получаю Operation not permitted
ошибку.
Что делать, чтобы избежать этой ошибки и изменить groupid процесса?
Но в человеке я прочитал: «setpgid() устанавливает PGID процесса, заданного pid to pgid. Если pid равно нулю, тогда используется идентификатор процесса вызывающего процесса. " – annamataris
Есть ли способ сделать это автоматически? Я имею в виду, когда я создаю процесс сна, используя popen, у него есть тот же GPID. Есть ли какое-нибудь разрешение? – annamataris