供参考:https://nodejs.org/api/child_process.html#child_process_options_detached
嘿,伙计们
所以我需要spawn
子进程,spawn
因为exec
不允许options.detached
和child.unref();
,这意味着它可以与父进程解耦,允许子进程自行运行和完成,反之亦然父进程(在我们的特殊情况下,父进程可以在长时间运行的子进程之前死亡, 在这种情况下,更新已完成,无需像 exec 那样等待孩子(。
我们有一个由节点(父(应用程序构建的长连接的("… ; … ; …")
命令,但就像spawn("echo stuff >>stderr.log")
不起作用一样,只有spawn('ls', [-l])
,我显然无法链接命令(因为它也在 docu 中引用,并且在 SO 上多次引用。
TLDR;
我们需要使用 spawn
,但spawn
不能处理链式 shell 命令。我现在真的需要在 bash 中编写我的命令并执行它吗,这真的是唯一的选择吗?
感谢
请注意spawn
的shell
选项:
如果
true
,则在外壳内部运行命令。在 UNIX 上使用'/bin/sh'
,在 Windows 上使用'cmd.exe'
。可以将不同的外壳指定为字符串。shell 应该理解 UNIX 上的-c
开关,或 Windows 上的/d /s /c
。默认为false
(无外壳(。
所以:
let child = child_process.spawn('foo; bar; blah', { shell : true });
编辑:如果您使用的是不支持此选项的节点版本,这里有一个替代方案:
let child = child_process.spawn('/bin/sh', [ '-c', 'foo; bar; blah' ]);