gpt4 book ai didi

C:如何在子进程末尾打印父进程?

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

如何修改这段代码,让父进程打印出它的信息,毕竟子进程执行完毕。

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

int main (int argc, char *argv[]) {
pid_t childpid = 0;
int i, n;

if (argc != 2){ /* check for valid number of command-line arguments */
fprintf(stderr, "Usage: %s processes\n", argv[0]);
return 1;
}
n = atoi(argv[1]);
for (i = 1; i < n; i++)
if ((childpid = fork()) <= 0)
break;

fprintf(stderr, "i:%d process ID:%ld parent ID:%ld child ID:%ld\n",
i, (long)getpid(), (long)getppid(), (long)childpid);
return 0;
}

最佳答案

要使父进程与子进程同步,您需要使用 waitwaitpid

https://linux.die.net/man/3/wait

为了简单起见,您可以在一个循环中调用 wait,该循环的迭代次数与您希望等待的 child 的数量相同。也许在您完成所有 child 的产卵后,沿着这些思路可以让您开始:

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

int main (int argc, char *argv[]) {
pid_t childpid = 0;
int i, n;

if (argc != 2){ /* check for valid number of command-line arguments */
fprintf(stderr, "Usage: %s processes\n", argv[0]);
return 1;
}
n = atoi(argv[1]);
for (i = 1; i < n; i++)
if ((childpid = fork()) <= 0)
break;

if (childpid>0){ // parent process
while (i>1) {
wait(NULL);
i--;
}
}

fprintf(stderr, "i:%d process ID:%ld parent ID:%ld child ID:%ld\n",
i, (long)getpid(), (long)getppid(), (long)childpid);
return 0;
}

关于C:如何在子进程末尾打印父进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46458684/

27 4 0
文章推荐: css - 使用 Flexbox 在 上模拟 "rowspan"