Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C fork调用中的奇怪输出_C_Fork - Fatal编程技术网

C fork调用中的奇怪输出

C fork调用中的奇怪输出,c,fork,C,Fork,我有下面的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++);

我有下面的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");
    }

}
为什么
vmw_ubuntu@vmwubuntu~/Tabe/TestCalb/<代码>出现在无处的地方?

我只是希望得到以下结果:

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”时,您正在为同一进程创建两个单独的副本。它不再是一个程序,父程序可以在子程序之前返回

编辑:


要实现所需的输出,需要插入对“waitpid”函数的调用。请参见

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

请记住,当您调用“fork”时,您正在为同一进程创建两个单独的副本。它不再是一个程序,父程序可以在子程序之前返回

编辑:


要实现所需的输出,需要插入对“waitpid”函数的调用。请参见

问题可能是printf函数被缓冲:
禁用缓冲或使用未缓冲的写入(..)。fork没有问题-它按规定工作。

问题可能是printf函数被缓冲:
禁用缓冲或使用未缓冲的写入(..)。fork没有问题-它按照规定工作。

一旦父进程完成,shell将恢复;它死掉的第一件事是打印命令提示符。但是,此时子进程仍在等待启动。这是您的提示。一旦父进程完成,shell将恢复;它死掉的第一件事是打印命令提示符。但是,孩子仍在等待开始。这是您的提示。
vmw_ubuntu@vmwubuntu:~/Desktop/Test C$ ./a.out
1
This is parent process.1
2
This is child process.