В этой программе я пытаюсь использовать функции fork() для создания 6 дочерних процессов и выполнения функций executenode(), но я чувствую в моем выходе есть что-то не так! Что случилось с моим кодом или системными вызовами? У меня есть программа, как этотможет кто-то сказать мне, что случилось с моей программой, используя системные вызовы fork() (программирование C)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
int executionnode(int i);
int main(){
pid_t childpid;
int i;
int row=6;
for(i=0;i<row;i++)
{ childpid=fork();
if(childpid==0)
continue;
else if (childpid>0)
executionnode(i);
else {
perror("something wrong");
exit(1);
}
}
}
int executionnode(int i){
sleep(i);
printf("hello, I am process:%ld\n",(long)getpid());
char *execArgs[] = { "echo", "Hello, World!", NULL };
execvp("echo", execArgs);
}
Everytime когда я запускаю эту программу, выход всегда, как это в моем Linux терминале:
/*
hello, I am process:3226
Hello, World!
[email protected]:~/Desktop/pa1-release$ hello, I am process:3227
Hello, World!
hello, I am process:3228
Hello, World!
hello, I am process:3229
Hello, World!
hello, I am process:3230
Hello, World!
hello, I am process:3231
Hello, World!
*/
Я считаю, мой выход даже не закончил, что означает, что выполнение моей программы еще не завершено, но [email protected]:~/Desktop/pa1-release$
появился в терминале раньше времени.
Что случилось с моим кодом или системными вызовами?
Может кто-нибудь помочь мне объяснить это? Я имею в виду, почему [email protected]:~/Desktop/pa1-release$
появился до того, как программа закончила свое исполнение?
спасибо!
Возможный дубликат [Ожидание execvp в основном] (http://stackoverflow.com/questions/3637973/waiting-for-execvp-in-main) – wimh