im узнает о 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--
похоже на родительском финиш первого, а затем ребенок начинает. но я думаю, что это не так. обратите внимание, что вторая подсказка оболочки открывается самой программой. любые идеи о том, что может произойти?
Edit:
если я положить sleep(1)
это работает просто отлично. я все еще думаю, что без задержки он не всегда должен иметь один и тот же порядок выполнения. даже считая до 100, он дает то же самое
Что происходит, когда вы используете большие цифры? Бросьте спать там на каждом цикле и посмотрите, что произойдет. – ChiefTwoPencils
Вы пробовали подсчет> 5? – John3136
, когда я использую большее число, он делает то же самое. – angel208