我们有一个 KSH 脚本,它运行一个进程exec
并挂起。
我们希望能够自动运行它并使其在后台运行。
我们尝试了这个:
./myScript.ksh &
然而这让我们只能在“半空中”等待,并且仍然需要按下按键Enter才能继续。
我们发现的唯一解决方案是将实际脚本更改为如下所示:
....
exec <some command> &
exit 0
如果没有这两者&
,它就exit 0
无法工作。
还有更好的解决办法吗?
答案1
我很难接受你的第一个例子,你在后台启动工作,然后你说它让你处于“半空中”,你必须按 [Enter] 才能继续。
请注意,后台脚本产生的任何输出都将被打印后shell 提示符 - 给人一种提示符缺失的错觉(实际上 shell 提示符已经存在,但向上滚动了)。您不必按 [Enter] 来输入下一个命令!
第二个例子(exec ... &
)完全没有意义:&符号指示 shell 将命令作为并行后台进程启动,而 指示exec
shell 启动不根本不会创建新进程,而是执行新命令“回收”当前进程。从技术上讲(非常简单):shell 程序的代码将被调用程序的代码替换。
结论:
您不必按 [Enter](但这样做也无妨)
由于 shell 脚本无论如何都是作为并行任务启动的,因此可以省略 & 符号。
exec
如果要启动的命令是脚本最后执行的命令,那么使用是绝对有意义的,因此牺牲 Shell 可以节省一个原本无用的进程。
[添加:] 我想到了一个原因,为什么你可能认为你必须按 [Enter]:
当 shell 进程显示命令提示符(等待您的下一个命令)时,根本不会有任何关于已完成的后台进程的通知。
只有当 shell 显示下一个命令提示符时,您才会收到通知。这也可能导致“必须按 [Enter] 才能允许后台进程终止”的错觉。