gpt4 book ai didi

c - 子进程的 setpgid : No Such Process

转载 作者:行者123 更新时间:2023-11-30 14:51:06 25 4
gpt4 key购买 nike

我不知道为什么我的计算机上会出现这样的错误。我已经在其他一些计算机上测试了代码。效果很好。

如果我删除 sleep(2),它就会起作用。我想我应该能够为僵尸进程设置 PGID。它取决于操作系统的实现吗?

#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>

#define CHECK(syscall, msg) do { \
if ((syscall) == -1) { \
perror(msg); \
_exit(1); \
} \
} while(0)

#define SAFE_CLOSE_NOT_STD(fd) do { \
if (fd != STDIN_FILENO && fd != STDOUT_FILENO && fd != -1) { \
CHECK(close(fd), "close error"); \
fd = -1; \
} \
} while(0)

int main () {
int ls_pid;
char *ls_argv[] = { "ls", NULL };

CHECK(ls_pid = fork(), "fork error");
if (!ls_pid) {
CHECK(setpgid(0, 0), "child setpgid error");
CHECK(execvp(ls_argv[0], ls_argv), "execve error");
} else {
printf("child pid:%d\n", ls_pid);
sleep(2); // no error arises if I remove this line
CHECK(setpgid(ls_pid, ls_pid), "setpgid error"); // error here
}
CHECK(wait(NULL), "wait error");

printf("Finish\n");
}

最佳答案

当您 sleep 时会收到错误,因为子进程已退出并且不再存在。除了调用 wait 之外,您无法对僵尸进程执行任何操作。

关于c - 子进程的 setpgid : No Such Process,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48532708/

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