Alw*_*oss -3 c linux ubuntu printf fork
我写了一个程序
#include <stdio.h>
#include <unistd.h>
int main()
{
int returnVal = fork();
printf("Return Value: %i\n", returnVal);
return 1;
}
Run Code Online (Sandbox Code Playgroud)
当我编译并运行时,我得到以下输出我只给出了一个printf语句然后为什么我看到2个打印.如果我删除了打印件,则不会打印任何内容.
alwin@alwin-desktop:~/Projects/Nix$ ./a.out
Return Value: 5547
Return Value: 0
Run Code Online (Sandbox Code Playgroud)
你需要通过man命令:-)
在
fork()创建通过复制调用进程的新进程.新进程(称为子进程)与调用进程完全相同,称为父进程.
DETAILS ::首先,您执行了创建子进程的代码.现在你有两个进程执行同一段代码.所以两个打印语句,父进程的第一个和子进程的第二个.
printf执行程序中的语句twice,因为一旦fork成功,程序就由two processes(child和parent进程)控制.这里的printf由子进程和父进程执行
为了避免这种行为,使用fork()在程序中进行三种不同的条件检查总是好的
int pid;
if((pid = fork()) == -1 )
{ //fork unsuccessful
}
else if ( pid > 0)
{ //This is parent
}
else
{//This is child
}
Run Code Online (Sandbox Code Playgroud)
fork创造一个新的过程.因此有两个进程执行下一个语句.父进程具有returnVal = 5547(子进程'PID)和子进程returnVal = 0.
该
fork()功能应创建一个新的过程.新进程(子进程)应该是调用进程(父进程)的精确副本