gpt4 book ai didi

c - C fork 调用中的奇怪输出

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

我有以下 C 代码。

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>


int main ()
{

int i=1;

pid_t child_pid = fork();

if (child_pid == 0)
{
printf ("%d\n", i++);
printf ("%d\n", i++);
printf ("This is child process.");
return 0;


}
else if (child_pid > 0) {
printf ("%d\n", i++);
printf ("This is parent process.");
}

else {
printf("Fork failed");
}

}

我按如下方式编译了以下内容:gcc testFork.c 并通过键入 ./a.out 运行代码。

我得到的输出是:

vmw_ubuntu@vmwubuntu:~/Desktop/Test C$ ./a.out
1
This is parent process.vmw_ubuntu@vmwubuntu:~/Desktop/Test C$ 1
2
This is child process.

为什么 vmw_ubuntu@vmwubuntu:~/Desktop/Test C$ 出现在茫茫荒野中?

我只是期待这个输出:

vmw_ubuntu@vmwubuntu:~/Desktop/Test C$ ./a.out
1
This is parent process.1
2
This is child process.

最佳答案

因为您没有在 printf 调用末尾添加换行符 '\n' 转义符;因此,当您的父进程返回到您的 shell 时,您的 shell `vmw_ubuntu@vmwubuntu:~/Desktop/Test C$' 的提示被附加到末尾。

请记住,当您调用“fork”时,您正在创建同一进程的 2 个独立副本。不再是1个程序,父子可以先于子子返回。

编辑:

要获得您想要的输出,您需要插入对“waitpid”函数的调用。见http://linux.die.net/man/2/wait

关于c - C fork 调用中的奇怪输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39031523/

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