【发布时间】:2018-04-18 08:04:22
【问题描述】:
#1 code
int child_pid;
for (int i = 0; i < 3; i++)
{
child_pid = fork();
if (child_pid == 0)
{ sleep(10); }
else
{ wait(&status); }
}
execlp("sleep","sleep","20",(char*)NULL);
#2 code
int child_pid;
for (int i = 0; i < 5; i++)
{
child_pid = fork();
if (child_pid == 0)
{ sleep(1); }
else
{ wait(&status);
execlp("sleep","sleep","20",(char*)NULL); }
}
有人可以向我解释这些代码中发生了什么吗? 我了解 fork() 向新创建的子进程返回零。这就是为什么我不明白为什么在 #2 代码中 else 分支也正在执行? execlp 用新的进程映像替换调用进程映像,但这究竟意味着什么?
编辑: 答案是第一个代码将创建 8 个进程,但我无法理解如何?为什么第一个代码会完成 230 秒? exec 对此有何影响?
第二个代码将创建 5 个进程,但它会在 (5*2sec+5*20sec) 之后完成。在第二个代码中,为什么会转到 else 分支?
我试图了解创建了多少进程以及代码休眠的原因和时间?
提前致谢。
【问题讨论】:
-
请正确格式化您的代码
-
“这就是为什么我不明白为什么在 #2 代码中 else 分支也正在执行?”你期望调用过程会发生什么?
-
因为我希望 fork() 返回 0,所以它什么时候去 else 分支。我已经编辑了我的问题以澄清
-
“我试图了解创建了多少进程,以及代码为什么会休眠以及休眠多长时间?” 所以运行它?或者阅读足够多的文档,以便您可以在脑海中逐步完成代码并弄清楚? IMO,正如 SO 不是代码编写服务一样,它也不应该是代码解释服务。
标签: c++ c multithreading