c - 为什么“return 0”语句没有到达?
问题描述
这是我的程序:
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i;
for (i=0; i < 3; i++) {
int id = fork();
if(id != 0) {
printf("This process is running under parent process \n");
}
else {
printf("This process id = %d, is a child process of parent process id = %d\n", getpid(),getppid());
}
return 0;
}
}
当它完成第一个循环时,我假设它应该打印“这个进程在父进程下运行\n”然后点击return 0;
语句。但它似乎没有按我的预期工作。
这是我的输出
This process is running under parent process
This process id = 839, is a child process of parent process id = 1
我需要对此进行解释。
解决方案
在这种情况下,父进程在子进程调用之前退出getppid()
,因此子进程被重新设置为 init。
由于您没有获得更多输出,因此显然return 0;
已达到。
fork()
被调用一次,但返回两次。这就是您获得新流程的方式。循环是不必要的。
此外,返回notfork()
类型的变量。分配给 type 似乎很安全,但我被烧过一次。pid_t
int
int
推荐阅读
- php - 使用 PHP 在 WordPress 站点中搜索字符串并替换为新字符串
- laravel - 数据透视表中的 detach()
- python-3.x - ReadProcessMemory 无效句柄
- amazon-web-services - AWS S3 Cloudormation 更新堆栈失败
- python - Python:venn3_circles:如何在 Venn 3 圆图中获取交点的值
- python-3.x - 如何在while循环后将变量重置为初始值
- javascript - 在基于 typescript 的项目中使用 Vue js 组件
- javascript - 我想要 addclass 时背景图像过渡淡入淡出
- javascript - 将推送通知订阅信息从 Web 应用程序安全地发送到服务器
- apache-spark - 由于 javax.net.ssl.SSLHandshakeException 初始化 SparkContext 时出错