分离的子进程在 Node.js 中的脚本退出时退出

Rya*_*nch 2 child-process node.js yeti gruntjs

据我所知,我已按照 api 文档中的说明进行操作。我使用 options 生成进程detached:true, stdio:['ignore','ignore','ignore'],并调用unrefChildProcess。ChildProcess有一个pid,所以我认为它已成功启动。我正在尝试从 grunt 任务中启动 Yeti 服务器。此代码位于异步调用内,因此next会继续并最终完成任务。我使用whichget cmd,它是 Mac OSX 10.9 上 Yeti 脚本的正确路径/usr/local/bin。端口也被定义为空端口。如果我在命令行上运行相同的命令,它就可以正常工作。grunt 退出后,我调用ps aux | grep nodeandps aux和 grep 来获取记录的 pid,但没有任何运行。这是代码:

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

Lou*_*uis 5

尝试这个:

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

我还没有看到任何一个例子说明spawn所有内容都作为第一个参数传递。我总是看到它的第一个参数只是命令名称(即可执行文件名称或可执行文件的路径),第二个参数是字符串数组。

您看到 pid 的事实并不能说明什么,因为在 Unix 类型的系统上, willspawnforkthen exec. 可能fork会成功,因此您会看到一个新的 pid,但会exec失败,因为可执行文件的名称对操作系统没有意义。