我遇到fork運行在我用來爲學校項目創建終端的函數中運行的問題。Fork失敗C
這個函數被調用來處理用戶輸入時,他們在鍵入命令:
void handleExternalCommands(char ** arr)
{
pid_t pid;
pid = fork();
printf("pid is ", (long) pid);
if (pid == -1)
{
perror("fork");
exit(EXIT_FAILURE);
}
else if (pid == 0)
{
int status = execvp(arr[0], arr);
printf("im in the child process");
if (status == -1)
{
// error handle
}
}
wait();
}
但是,不管是什麼我輸入,我不能真正使if語句內。如果我嘗試通過使用以下方法來了解pid發生了什麼:
printf(pid);
我得到了分段錯誤錯誤?
感謝您提前幫助大家。
UPDATE:
我已經改變了代碼,它上面是什麼。打印pid只發生一次,它不會打印任何內容:「pid is」
如果fork失敗,您可以輕鬆確定原因。 'if(pid == -1)perror(「fork」);' –
'printf(pid)'不會打印'pid',除非'pid'是一個沒有格式化字符的字符串。閱讀'printf()'的文檔。 – Peter
如果'execvp()'工作,'printf()'永遠不會執行。如果(a)你在最後加了一個換行符,並且(b)'execvp()失敗了,你只會看到來自'printf()'的消息。 (OK:即使沒有換行符也可能會看到它,但換行符是一個好主意。)將'printf()'移到'execvp()'之前,並且(絕對)添加換行符,您應該看到信息。 –