考虑下面的代码:在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