供参考: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])
一样,我显然不能链接命令(因为他也引用了该命令)文档和SO上的多次。
TLDR;
我们需要使用spawn
,但是spawn
无法处理链接的Shell命令。
我现在是否真的需要用bash编写命令并执行该命令,这真的是唯一的选择吗?
谢谢
最佳答案
注意shell
的spawn
选项:
如果为true
,则在shell内运行命令。在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' ]);
关于node.js - Node.js中具有spawn()的多命令shell AS分离的子进程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44431993/