gpt4 book ai didi

c - 使用 fork() 获取 child 的 child

转载 作者:太空宇宙 更新时间:2023-11-04 02:27:26 25 4
gpt4 key购买 nike

我在操作系统课上遇到了一些问题。我需要在 C 中编写一个函数,其中每个 child 生成另一个 child ,并且每个 parent 只能有一个 child 。我还必须打印他们的 pid。

这是我目前所拥有的:

#define MAX_COUNT 10

pid_t ex5_1 (pid_t pid) {
pid = fork();
if (!pid) {
printf("ID %d Parent %d \n", getpid(), getppid());
_exit(1);
}
return pid;
}
void ex5 () {
pid_t pid;
int i;
pid = fork();
for (i = 1; i <= MAX_COUNT; i++) {
pid = ex5_1(pid);
int status;
wait(&status);
}
}

如果有人能提供帮助,我将不胜感激!

最佳答案

这是这个人对 fork 的评价:

On success, the PID of the child process is returned in the parent, and 0 is returned in the child. On failure, -1 is returned in the parent, no child process is created, and errno is set appropriately.

所以你只需要像这样检查 fork 的返回:

int pid = fork();
if (pid < 0)
// error handling here
else if (pid == 0)
// here you are in the child
else
// here you are in the parent

最后,要在 child 中创建一个 child,您可以这样做:

void child(int i)
{
int pid;

printf("Child number %d, ID %d Parent %d \n", i, getpid(), getppid());
if (i == MAX)
return;
pid = fork();
if (pid < 0)
// error handling here
else if (pid == 0)
child(++i);
else
waitpid(pid, null, 0);
exit(0);
}

int main() {
int i = 0;
int pid = fork();
if (pid < 0)
// error handling here
else if (pid == 0)
child(++i);
else
waitpid(pid, null, 0);
}

关于c - 使用 fork() 获取 child 的 child ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49074649/

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