Как уже отмечалось, вам необходимо сохранить значение вызова fork. Вы действительно должны использовать больше, чем если бы на развилке. Есть три случая:
- 0: вы дочерний процесс
-
0: вы родитель и получил ребенка PID назад
- -1: что-то ужасное произошло и fork failed
Вы действительно хотите знать о случае 3, это испортит весь ваш день. (также звонок руководителя)
int main() {
int pid = fork();
if(-1 == pid) {
fprintf(stderr, "Big problems forking %s\n", strerror(errno);
exit(-1);//or whatever
}
else if (0 == pid) {
if (-1 == execvp(cmdName,cmdParam)) {
//like above, get some output about what happened
}
}
//no need to else here, execvp shouldn't return
// if it does you've taken care of it above
waitpid(pid, NULL, 0);
printf("Resuming main()...");
}
возвращение (0); }
Это nitpicky, но «Возобновление main() ...» является немного неправильным. Ваш родительский процесс никогда не выполнял какой-либо код внутри оператора if. –
Я согласен, отредактировал эту часть сейчас – 2010-09-03 17:27:47