分离的subprocess在node.js的脚本出口退出

据我所知,我遵循api文档中的说明。 我使用detached:true, stdio:['ignore','ignore','ignore']的选项产生了这个过程detached:true, stdio:['ignore','ignore','ignore'] ,我在unref上调用unref。 ChildProcess有一个pid,所以我认为它已经成功启动了。 我试图从一个咕task任务中启动一个雪人服务器。 这个代码是在一个asynchronous调用,所以next进展,并最终完成任务。 我使用which来获取cmd ,以及Mac OSX 10.9上的/usr/local/bin雪人脚本的正确path。 端口也被定义为一个空端口。 如果我在命令行上运行相同的命令,它工作得很好。 咕噜声退出后,我打电话给ps aux | grep node ps aux | grep nodeps aux和grep为logging的PID和没有任何运行。 这里是代码:

 yeti = spawn("" + cmd + " --server --port " + port, [], { detached: true, stdio: ['ignore', 'ignore', 'ignore'] }); yeti.unref(); next("Yeti server is running. pid: " + yeti.pid); 

尝试这个:

 spawn(cmd, ["--server", "--port", port], { detached: true, stdio: ['ignore', 'ignore', 'ignore'] }); 

我还没有看到一个例子,其中一切都作为第一个parameter passing。 我总是看到它的第一个参数只是命令名(即可执行文件的名称或可执行文件的path),第二个参数是一个string数组。

你看到一个pid的事实并不是很明显,因为在Unixtypes的系统上, spawn将会forkexecfork可以成功,所以你看到一个新的PID,但exec失败,因为可执行文件的名称是没有意义的操作系统。

如果在调查为什么当你杀死父母时你的进程退出了,但是它被分离了,并且你正在使用PM2,你会发现这个: https : //github.com/Unitech/pm2/issues/1036

pm2使用杀死进程树。 这会杀死整个进程树。 使用--no-treekill运行cli命令将解决这个问题。

相关的也有: https : //github.com/Unitech/PM2/issues/1564