現在我正在編寫一個必須執行子進程的C程序。我不是在同時進行多個子進程或任何事情,所以這相當簡單。我確實成功地執行了內置的shell程序(即cat和echo之類的東西),但是我也需要能夠判斷這些程序中的一個何時無法成功執行。我用下面的簡化的代碼嘗試這樣的:execvp/fork - 如何捕獲不成功的執行?
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程序時,它不會執行可執行文件當前目錄中的程序(即該代碼在其中運行的程序)。爲了讓它在當前目錄中運行程序,還有其他事情需要做嗎?
謝謝!
[如何在fork()之後處理execvp(...)錯誤?](https:// stackoverflow。com/questions/1584956/how-to-handle-execvp-errors-after-fork) – Ruslan