相关疑难解决方法(0)

"fork()"之后的printf异常

操作系统:Linux,语言:纯C

我正在学习一般的C编程,以及在特殊情况下在UNIX下进行C编程.

printf()在使用fork()呼叫后,我发现了一个奇怪的(对我来说)函数的行为.

#include <stdio.h>
#include <system.h>

int main()
{
    int pid;
    printf( "Hello, my pid is %d", getpid() );

    pid = fork();
    if( pid == 0 )
    {
            printf( "\nI was forked! :D" );
            sleep( 3 );
    }
    else
    {
            waitpid( pid, NULL, 0 );
            printf( "\n%d was forked!", pid );
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

产量

Hello, my pid is 1111
I was forked! :DHello, my pid is 1111
2222 was forked!
Run Code Online (Sandbox Code Playgroud)

为什么第二个"Hello"字符串出现在子输出中?

是的,这正是父母在开始时与父母一起打印的内容pid …

c unix linux printf fork

66
推荐指数
3
解决办法
3万
查看次数

c中的fork()命令 - 这段简单代码的输出是什么?

可能重复:
Unix fork()系统调用什么时候运行?

我看了维基百科,文章说,"fork()系统调用的目的是创建一个新进程,它成为调用者的子进程,之后父进程和子进程都会执行后面的代码. fork()系统调用.因此,区分父进程和子进程非常重要.这可以通过测试fork()系统调用的返回值来完成."

在这种情况下,此代码执行什么:

printf("This is a fork!");
fork();
Run Code Online (Sandbox Code Playgroud)

鉴于描述,看起来它会说"这是一个叉子!" 只有一次,因为fork()语句后没有任何东西.但是,当我在linux机箱上测试时,它打印出"这是一个叉子!" 两次.那是哪个呢?

谢谢.

c c++ fork process

1
推荐指数
1
解决办法
781
查看次数

标签 统计

c ×2

fork ×2

c++ ×1

linux ×1

printf ×1

process ×1

unix ×1