现在我正在编写一个必须执行子进程的 C 程序。我不会同时执行多个子进程或任何事情,所以这相当简单。我肯定成功地执行了内置的 shell 程序(即 cat 和 echo 之类的东西),但我还需要能够判断这些程序之一何时无法成功执行。我正在尝试使用以下简化代码:
int returnStatus; // The return status of the child process.
pid_t pid = fork();
if (pid == -1) // error with forking.
{
// Not really important for this question.
}
else if (pid == 0) // We're in the child process.
{
execvp(programName, programNameAndCommandsArray); // vars declared above fork().
// If this code executes the execution has failed.
exit(127); // This exit code was taken from a exec tutorial -- why 127?
}
else // We're in the parent process.
{
wait(&returnStatus); // Wait for the child process to exit.
if (returnStatus == -1) // The child process execution failed.
{
// Log an error of execution.
}
}
例如,如果我尝试执行 rm fileThatDoesntExist.txt,我想认为这是一个失败,因为该文件不存在。我怎样才能做到这一点?此外,虽然该 execvp() 调用成功执行了内置的 shell 程序,但它不会执行可执行文件当前目录中的程序(即运行此代码的程序);为了让它在当前目录中运行程序,我还需要做些什么吗?
谢谢!