fork() 不等待 child
fork() not waiting for child
我认为等待暂停主执行直到 child 进程完成。
以下是我期望在控制台中看到的内容。
我是 ID 为 12833 的 parent <- parent
我先打电话给 id 0 <- child
我在 wait()
之后先用 ID 12833 <- parent 打电话
相反,我看到了这个...
#控制台输出
我是 parent id 12833
我先打电话给 id 12833
我先用 id 0 打电话
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char* argv[])
{
int id = fork();
if(id!=0){
//
printf("I am the parent with id %d\n",id);
wait(); //my code has no respect for wait()
}
printf("I'm calling first with id %d\n",id);
return 0;
}
我的输出是
I'm calling first with id 0
I am the parent with id 29807
I'm calling first with id 29807
您不应依赖缓冲输出。检查 wait.
的返回值
int main(int argc, char* argv[])
{
int id = fork();
if(id!=0){
printf("I am the parent with id %d\n", id);
int wstatus = 0;
if (wait(&wstatus) != -1) //my code has no respect for wait()
printf("I am the parent with id %d and my child exited\n", id);
}
else
{
printf("I'm child\n");
}
return 0;
}
由于缓冲输出,输出又不是您所期望的。
I'm child
I am the parent with id 18057
I am the parent with id 18057 and my child exited
如果您刷新输出缓冲区,您将获得所需的输出:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char* argv[])
{
int id = fork();
if(id!=0){
printf("I am the parent with id %d\n", id);
fflush(stdout);
int wstatus = 0;
if (wait(&wstatus) != -1) //my code has no respect for wait()
{
printf("I am the parent with id %d and my child exited\n", id);
fflush(stdout);
}
}
else
{
printf("I'm child\n");
fflush(stdout);
}
return 0;
}
产出
I am the parent with id 21487
I'm child
I am the parent with id 21487 and my child exited
我认为等待暂停主执行直到 child 进程完成。
以下是我期望在控制台中看到的内容。
我是 ID 为 12833 的 parent <- parent
我先打电话给 id 0 <- child
我在 wait()
之后先用 ID 12833 <- parent 打电话相反,我看到了这个... #控制台输出
我是 parent id 12833
我先打电话给 id 12833
我先用 id 0 打电话
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char* argv[])
{
int id = fork();
if(id!=0){
//
printf("I am the parent with id %d\n",id);
wait(); //my code has no respect for wait()
}
printf("I'm calling first with id %d\n",id);
return 0;
}
我的输出是
I'm calling first with id 0
I am the parent with id 29807
I'm calling first with id 29807
您不应依赖缓冲输出。检查 wait.
int main(int argc, char* argv[])
{
int id = fork();
if(id!=0){
printf("I am the parent with id %d\n", id);
int wstatus = 0;
if (wait(&wstatus) != -1) //my code has no respect for wait()
printf("I am the parent with id %d and my child exited\n", id);
}
else
{
printf("I'm child\n");
}
return 0;
}
由于缓冲输出,输出又不是您所期望的。
I'm child
I am the parent with id 18057
I am the parent with id 18057 and my child exited
如果您刷新输出缓冲区,您将获得所需的输出:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char* argv[])
{
int id = fork();
if(id!=0){
printf("I am the parent with id %d\n", id);
fflush(stdout);
int wstatus = 0;
if (wait(&wstatus) != -1) //my code has no respect for wait()
{
printf("I am the parent with id %d and my child exited\n", id);
fflush(stdout);
}
}
else
{
printf("I'm child\n");
fflush(stdout);
}
return 0;
}
产出
I am the parent with id 21487
I'm child
I am the parent with id 21487 and my child exited