在尝试弄清楚为什么一个Capistrano任务(试图在后台启动守护进程)挂起之后,我发现在bash over ssh中使用
以下命令将在bash中挂起(即等待
以下内容不会生效:
这也不会:
&&
会阻止后续程序在后台运行。我已经在bash 4.1.5和4.2.20上尝试过了。以下命令将在bash中挂起(即等待
sleep
完成):ssh localhost "cd /tmp && nohup sleep 10 >/dev/null 2>&1 &"
以下内容不会生效:
ssh localhost "cd /tmp ; nohup sleep 10 >/dev/null 2>&1 &"
这也不会:
cd /tmp && nohup sleep 10 >/dev/null 2>&1 &
无论是使用&&
还是ssh,zsh和dash都会在所有情况下将其后台执行。这对于bash来说是正常/预期的行为,还是一个bug呢?
disown
内置命令可能比nohup
命令更好用。如果你感兴趣,可以在运行Bash时输入help disown | less
来了解更多信息。如果你碰巧找到了一般性的解决方案,请在此发布。我很想看看。 - thbdisown
、nohup
和重定向,但都没有成功。&&
始终阻止后台运行。我可以通过将两个命令包装在子 shell 中来解决问题,但那并不是真正的解决方法。 - Hinrikcd
命令执行需要很长时间吗?这可能是远程服务器的问题,例如负载过重。 - suvayusleep
完成后才返回。 - Hinrik