void child(int pid){
printf("Child PID:%d\n",pid);
exit(0);
}
void parent(int pid){
printf("Parent PID:%d\n",pid);
exit(0);
}
void init(){
printf("Init\n");//runs before the fork
}
int main(){
init();//only runs for parent i.e. runs once
printf("pre fork()");// but this runs for both i.e. runs twice
//why???
int pid = fork();
if(pid == 0){
child(pid); //run child process
}else{
parent(pid);//run parent process
}
return 0;
}
выход:Системный вызов Unix fork(), который работает, когда?
Init
pre fork()Parrent PID:4788
pre fork()Child PID:0
У меня есть процесс в ОС Unix (Ubuntu в моем случае). Я не могу, чтобы жизнь меня поняла, как это работает. Я знаю, что функция fork()
разделяет мои программы в двух процессах, но откуда? Создает ли он новый процесс и снова запускает всю основную функцию, и если да, то почему init()
запускается только один раз и printf()
дважды?
Почему функция printf("pre fork()");
работает дважды, а функция init()
работает только один раз?
спасибо большое. действительно полезно: D – boogie666
Вау, это так тонко! +1 от меня! –
Простое размещение символа новой строки не обязательно очищает буфер. Запустите код с перенаправлением stdout в обычный файл, и вы увидите точно такое же поведение. stdout - это * not * строка, буферизованная по умолчанию, если она не является tty. –