gpt4 book ai didi

c - 无法更改进程的 gid

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:47:06 26 4
gpt4 key购买 nike

我需要更改我的父进程的 PGID,所以我做了这样的事情:

#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?

最佳答案

Operation not permitted 错误消息与 EPERM 错误代码相关联,根据 man 2 setpgid (引用):

EPERM

An attempt was made to move a process into a process group in a different session, or to change the process group ID of one of the children of the calling process and the child was in a different session, or to change the process group ID of a session leader (setpgid(), setpgrp()).

因此,您收到的错误似乎有 3 种不同的解释:

  1. 您正在尝试将进程移动到不同 session 中的进程组中。

  2. 您正在尝试更改处于不同 session 中的 child 的 PGID。

  3. 您正在尝试更改 session 负责人的 PGID。

情况 2 和情况 3 看起来与您的问题无关,所以我猜您属于第一种情况。如果 6654 是随机选择的,则进程组 6654 可能处于不同的 session 中。

您可以验证此运行类似 $ ps eajx 的内容并检查所涉及的每个进程的输出的 SID 字段,包括进程组 6654。

关于c - 无法更改进程的 gid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41778732/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com