我想使用复合命令在后台远程执行一些非常短的命令,但我注意到ssh要等到所有命令都执行完。我尝试了几种选择,结果是:
time ssh $IP 'sleep 20 >/dev/null 2>&1 &'
real 0m1,776s
user 0m0,003s
sys 0m0,003s
time ssh $IP 'sh -c " sleep 20; " >/dev/null 2>&1 &'
real 0m1,850s
user 0m0,007s
sys 0m0,000s
time ssh $IP '( sleep 20; ) >/dev/null 2>&1 &'
real 0m1,742s
user 0m0,000s
sys 0m0,007s
time ssh $IP '{ sleep 20; } >/dev/null 2>&1 &'
real 0m21,876s # <--- ssh waits until sleep is over
user 0m0,003s
sys 0m0,003s
为什么{}阻止ssh在启动后台进程后退出?
PS目标机器运行带有sh shell的QNX 7。不要抨击。
手册中的报价:
将命令列表放在大括号之间会导致该列表在当前shell上下文中执行。没有创建子shell
如果没有子shell,我想它就不能在后台运行。