当您成功使用时exec
,exec
'd 程序将替换您的外壳。这exec
“d程序的退出状态被发送回执行你的shell父进程。
exec 的退出状态可以由以下行解释的唯一方法exec
是 exec 调用失败,通常仅当请求的命令不存在或文件不可执行时。这不包括选项解析问题,因为这些问题在 exec 程序启动后就会被解析。
如果你想让你的 shell 解释一个程序的退出代码,你不能用exec
它来做。只需在您的 shell 中运行该程序,当它完成时,您可以查看退出状态。
更多信息,您可以咨询 man 3 exec
,这个或它的姊妹函数之一是您的 shell 调用的基本低级 Unix 函数。
我能想到的exec
从 shell 命令行使用的唯一合理原因是在内存极低的机器上,其中 shell 使用的内存有问题,或者在有分叉问题的机器上,你很幸运有一个shell,你不能 fork 任何新进程,你只需要一个新进程来纠正问题。
exec 的正常使用是在 shell 脚本中,例如
(感谢@chicks)在将控制台委托给不太受信任的用户的登录脚本中;当应用程序终止时,用户将无法控制您的 shell
在仅为 exec 程序设置前提条件(环境、ulimit)的 shell 脚本中,并且您希望 exec 程序的返回代码直接返回给调用您脚本的人。由于 exec 的进程是相同的 PID,脚本可以记录它。
小智 1
您可以使用执行的命令的退出状态来exec
查看它是否有效,前提是该命令使用其自己的退出状态执行明智的操作,并且您想知道的内容足够简单,可以在退出状态中进行编码。
在我看来,就像bash
exec
保留了执行命令的 stdout 和 stderr 。我认为您可以使用执行的命令的输出来exec
查看它是否有效。
在我看来,它也像bash
检查要执行的命令的权限,因此如果您给它一个没有执行或读取权限的文件,您会得到一些输出。