【发布时间】:2020-05-05 20:18:28
【问题描述】:
我正在尝试编写一个创建子进程的程序。子进程创建一个新会话。另外,必须验证子进程已经成为组的leader,并且没有控制终端。
它总是显示waiting for parent to die,进入了一个无限循环。我需要改变什么,而不是那样显示?
这是我的代码:
#include <unistd.h>
#include <stdio.h>
#include <fcntl.h>
int main(int argc, char *argv[]) {
pid_t pid;
if ((pid = fork()) < 0) {
perror("fork error");
return -1;
} else
if (pid == 0) {
// Wait for the parent to die.
while (getppid() != 1) {
printf("Waiting for parent to die.\n");
sleep(1);
}
pid = setsid();
printf("pid, pgid and \"sid\" should be the same:\n");
printf("pid: %d pgid: %d sid: %d\n", getpid(), getpgrp(), getsid(0));
if ((open("/dev/tty", O_RDWR)) < 0) {
printf("Child has no controlling terminal!\n");
} else {
printf("Child has a controlling terminal!\n");
}
} else {
if ((open("/dev/tty", O_RDWR)) < 0) {
printf("Parent has no controlling terminal!\n");
} else {
printf("Parent still has a controlling terminal!\n");
}
_exit(0);
}
return 0;
}
【问题讨论】:
-
我假设您的原始父进程从不将任何内容打印到屏幕上。
-
尽管我使用的是 Mac,但我完全按照键入的方式编译了您的代码,并且运行良好。不知道该告诉你什么。
标签: c linux process child-process