今天,我用C ++编写了一个小程序:
pid_t pChild=0;
printf("Main process ID:%d\n",getpid());
pChild= fork();
printf("%d\n",pChild);
if (pChild!=0){
printf("Parent process ID:%d\n",getpid());
printf("Child process ID:%d\n",pChild);
}
else printf("Sorry! The child can not be created\n");
return 0;
输出就像这样
主要流程ID:3140
抱歉!无法创建孩子
父进程ID:3140
子进程ID:3141
然后,我想知道输出。
我猜测子进程的第一个getpid()没有运行,因为它从其父进程中使用getpid()读取相同的数据;这个消息
抱歉!无法创建孩子
必须来自子进程的if语句。如果我错了,请纠正我......
但是我仍然无法理解为什么孩子的fork()函数没有运行。为什么被阻止?是因为它们读取了相同的pChild数据(子进程中的fork()之一,另一个是主进程的if语句)?
任何人都可以解释一下它的更多细节吗?谢谢。
答案 0 :(得分:5)
返回值
成功完成后,fork()将0返回子进程 并应将子进程的进程ID返回给父进程。
您的代码假定任何零返回值都是错误。
继续:
两个进程都将继续从fork()函数执行。 否则,-1将返回到父进程,没有子进程 应创建进程,并设置errno以指示 错误。
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<button id="display-img" class="btn btn-primary"><span><i class="glyphicon glyphicon-menu-right"></i></span>Kid who did not get rounded</button>
<div class="ajax_accordion_content" style="display: none;">
<div class="report-detail">
<table border="0" cellpadding="0" cellspacing="0" width="100%" class="table_basic">
<tbody>
<!-- ThingLink image to be embedded -->
<img style="max-width: 100%;" src="http://cdn.thinglink.me/api/image/832705713204625409/1024/10/scaletowidth#tl-832705713204625409;1043138249'" class="alwaysThinglink" />
<script async charset="utf-8" src="http://cdn.thinglink.me/jse/embed.js"></script>
</tbody>
</table>
</div>
</div>
返回值是错误指示。