int spawn( char* program, char** args) {
pid_t child_pid;
child_pid = fork();
if( child_pid > 0) { /
wait(NULL);
return (int)child_pid;
}
else {
if(execvp(program, args) == -1){
exit(EXIT_FAILURE);
}
return (int)child_pid;
}
}
我知道这段代码有点乱,但请耐心等待:我试图创建自己的shell。这个函数将启动一个新的子进程并执行代码。但是,当我输入一个字符串时,我无法返回错误。
例如,如果我输入' heyman'我只是得到了#heyman'回来的时候,我想要回到某种程度的错误(' heyman'不是命令)。
我希望退出(EXIT_FAILURE)会这样做,但事实并非如此。如果有人能帮助我,我将不胜感激
答案 0 :(得分:3)
使用perror()
报告错误。
if (execvp(program, args) == -1) {
perror("execvp");
exit(EXIT_FAILURE);
}
不需要在子函数中使用return (int)child_pid
。如果execvp()
成功,则运行后没有代码;如果失败,则报告错误并退出。