无法生成后台进程

无法生成后台进程

我的团队使用 Pallet(想想 Clojure 中的 Puppet)来自动化服务器配置,但遇到了一个相当基本的问题:Pallet 可以直接在目标虚拟机上执行任意脚本,但如果其中一个脚本碰巧在后台放置了一个命令,那么它只是没有被执行。至少,不是以我们尝试设计事物的方式。

我们已经尝试使用 & 和 screen 进行此操作,后者是理想的选择,但两者都不起作用。例如,我们尝试让 Pallet 在目标虚拟机上执行以下脚本......

touch a
touch b &
touch c

我们远程看到的只是文件 a 和 c 存在。执行主脚本的 shell(或者我的意思是进程?)只是拒绝执行“touch b”。另一方面,如果我们在同一主机上使用普通终端会话执行此脚本,则它可以正常工作。

当然,我们是从 Pallet 的角度来解决这个问题的。但如果这没有结果,有人可以告诉我在什么情况下 shell 会拒绝执行后台进程,以防它为我们提供解决方法的线索吗?

我们正在使用 CentOS 6.5 64 位,但我认为这并不相关。

答案1

尝试:

touch b & disown

也许子进程会因为父进程退出而被信号杀死。用于help disown查看 disown 的作用。

有单独的nohup程序可以执行相同的操作,但这可以在任何 shell 下工作:

nohup touch b

相关内容