考慮下面的代碼:在execl()調用之後退出(0)是否有意義?
close(channel_data->pty_master);
if (login_tty(channel_data->pty_slave) != 0) // new terminal session
{
exit(1); // fail
}
execl("/bin/sh", "sh", mode, command, NULL); // replace process image
exit(0);
據execl()
文檔,當前的進程映像被替換和呼叫僅返回上的錯誤。
但是,如果過程映像被替換,爲什麼在致電execl()
之後致電exit()
?
在這種情況下,「失敗」究竟意味着什麼? – Shuzheng
這意味着您嘗試運行的程序無法啓動,例如如果/ bin/sh不存在,或者它沒有適當的執行權限,或者系統不允許你運行程序(例如,你遇到了一些系統限制或策略,不允許你創建更多的進程 – nos
@Shuzheng'exec()'family函數可能會失敗,原因很多,但結果是一樣的:當前進程的圖像不會被替換,並且會設置'errno',因此代碼放在'exec * ()'call will be executed。 – Geographer