gpt4 book ai didi

创建新流程

转载 作者:行者123 更新时间:2023-11-30 15:31:10 24 4
gpt4 key购买 nike

我正在通过 fork 创建新进程:

printf("original process = %d\n", getpid());
fork();
printf("parent = %d; child = %d\n", getpid(), getppid());
fork();
printf("parent = %d; child = %d\n", getpid(), getppid());
if(fork() == 0){
printf("parent = %d; child = %d\n", getpid(), getppid());
if(fork() == 0){
printf("parent = %d; child = %d\n", getpid(), getppid());
}
}
fork();
printf("parent = %d; child = %d\n", getpid(), getppid());

我想打印出我创建了多少个进程。上面所示的我的方法并不是打印已创建的进程数的最佳方法。所以我的问题是:我们如何在每次 fork 时打印创建了多少个新进程,而不需要某种循环?

最佳答案

每次成功调用 fork 都会创建一个新进程,父进程和子进程都会从 fork() 返回。子进程将得到 0 作为返回值,父进程将得到子进程的 PID。

printf("I am the root %d\n", getpid());
if (fork() == 0)
printf("I am %d, child of %d\n", getpid(), getppid());
if (fork() == 0)
{
printf("I am %d, child of %d\n", getpid(), getppid());
if (fork() == 0)
printf("I am %d, child of %d\n", getpid(), getppid());
}
if (fork() == 0)
printf("I am %d, child of %d\n", getpid(), getppid());

等等...

代码中的问题是,在某些情况下,您在打印文本时没有检查 fork() 的返回值,因此这些行将由父级和子级打印。使用我的代码,每个进程在创建时仅打印一行。

关于创建新流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25031850/

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