gpt4 book ai didi

c - 不使用 wait() 等待子进程

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

在使用fork()时,父进程中不使用wait()是否可以保证子进程先于父进程执行?


这与 Process API chapter 中的作业问题有关的 Operating Systems: Three Easy Pieces ,一本免费的在线操作系统书籍。

问题说:

  1. Write another program using fork(). The child process should print "hello"; the parent process should print "goodbye". You should try to ensure that the child process always prints first; can you do this without calling wait() in the parent?

这是我使用 wait() 的解决方案:

#include <stdio.h>
#include <stdlib.h> // exit
#include <sys/wait.h> // wait
#include <unistd.h> // fork

int main(void) {
int f = fork();
if (f < 0) { // fork failed
fprintf(stderr, "fork failed\n");
exit(1);
} else if (f == 0) { // child
printf("hello\n");
} else { // parent
wait(NULL);
printf("goodbye\n");
}
}

在考虑之后,我决定最后一个问题的答案是“不,你不能”,但随后的一个问题似乎暗示你可以:

  1. Now write a program that uses wait() to wait for the child process to finish in the parent. What does wait() return? What happens if you use wait() in the child?

我对第二个问题的理解有误吗?如果没有,您如何做第一个问题所要求的?如何在不在父级中使用 wait() 的情况下让子级先打印?

最佳答案

我希望这个答案还不算太晚。

几分钟前,我给 Remiz(这本书的作者)发了邮件,得到了这样一段重播(摘录了一些片段):

Without calling wait() is hard, and not really the main point.What you did -- learning about signals on your own -- is a good sign,showing you will seek out deeper knowledge. Good for you!

Later, you'll be able to use a shared memory segment, andeither condition variables or semaphores, to solve this problem.

关于c - 不使用 wait() 等待子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45952305/

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