- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我不知道为什么我的计算机上会出现这样的错误。我已经在其他一些计算机上测试了代码。效果很好。
如果我删除 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/
在为我的 OS 类编写程序时,我发现了一个有趣的案例,该案例涉及一个似乎涉及 setpgid 的竞争条件。 分别编译下面的每个程序。在执行完./test 3(或任意数字> 2)后,ps jx 会显示所
我不知道为什么我的计算机上会出现这样的错误。我已经在其他一些计算机上测试了代码。效果很好。 如果我删除 sleep(2),它就会起作用。我想我应该能够为僵尸进程设置 PGID。它取决于操作系统的实现吗
我正在尝试将进程的 pgrp 更改为子进程的 pgrp,以便我可以在父进程上 setsid。唯一的问题是我不断收到 EPERM 错误代码。根据 htop,这两个进程具有相同的 session 组。 我
来自 Linux 编程接口(interface) #include int setpgid(pid_t pid , pid_t pgid ); The pid argument may not
我就是不明白。 我的进程树: 0 / \ 1 2 / \ 5 3 / 4 我想创建一个进程组(3、4、5),并向该组
当我执行这个函数时,我计算出了 setpgid() 的函数,结果将被拒绝权限。然后我当时以 root 用户身份登录,这也会打印错误消息,因为权限被拒绝。那么哪个用户可以使用这个功能。谁能给我解释一下?
根据 man setpgid(2) 页面, EACCES An attempt was made to change the process group ID of one of the childr
我正在尝试重新编写一个 shell,我想更改用我的 shell 启动的程序的 pgid! 我尝试在我的 fork() 之后执行不同的功能: setpgid(0, 0) 使诸如 vim、emacs 之类
root@arch:/ 19:27:32 # docker run -t -i ubuntu /bin/bashroot@74b77bf42943:/# lsbash: child setpgid (
我正在尝试编写一个执行子命令的程序,并且不允许该子命令被 Ctrl+C 杀死。 我读到可以使用 setpgid/setpgrp 来完成此操作。 以下代码适用于 OSX,但在 Linux(2.6.32、
我是一名优秀的程序员,十分优秀!