即时了解fork()
,但是在我的Ubuntu系统中出现了一些问题。进出口运行这段代码:fork(),首先运行父进程,然后运行子进程
#include <stdio.h>
#include <unistd.h>
int main(int argc, char **argv)
{
printf("--beginning of program\n");
int counter = 0;
pid_t pid = fork();
if (pid == 0)
{
// child process
int i = 0;
for (; i < 5; ++i)
{
printf("child process: counter=%d\n", ++counter);
}
}
else if (pid > 0)
{
// parent process
int j = 0;
for (; j < 5; ++j)
{
printf("parent process: counter=%d\n", ++counter);
}
}
else
{
// fork failed
printf("fork() failed!\n");
return 1;
}
printf("--end of program--\n");
return 0;
}
我知道家长和孩子应该运行他们在没有特定的顺序代码,使代码应该返回是这样的:我每次运行程序时
-beginning of program
parent process: counter=1
parent process: counter=2
parent process: counter=3
child process: counter=1
parent process: counter=4
child process: counter=2
parent process: counter=5
child process: counter=3
child process: counter=4
child process: counter=5
--end of program--
但,他们运行的似乎是相同的顺序。这里是我所得到的每一次我运行该程序捕获:
[email protected]:~/Documents/S-O$ ./sample
--beginning of program
parent process: counter=1
parent process: counter=2
parent process: counter=3
parent process: counter=4
parent process: counter=5
--end of program--
[email protected]:~/Documents/S-O$
child process: counter=1
child process: counter=2
child process: counter=3
child process: counter=4
child process: counter=5
--end of program--
好像父完成第一,然后孩子开始。但我想那不是真的。请注意,第二个shell提示是由程序本身打开的。任何可能发生的想法?
编辑:
,如果我把一个sleep(1)
它工作得很好。我仍然认为,不应该总是有相同的执行顺序。即使计数到100,它也会给出相同的结果
当你使用更大的数字时会发生什么?在每个循环中投入睡眠,看看会发生什么。 – ChiefTwoPencils
你试过计数> 5吗? – John3136
当我使用更大的数字时,它只是做同样的事情。 – angel208