供参考:https://nodejs.org/api/child_process.html#child_process_options_detached

大家好,

因此,我需要spawn一个子子进程,spawn,因为exec不允许options.detachedchild.unref();,这意味着它可以与父进程解耦,从而允许子进程在其上运行并完成自己拥有,反之亦然,父组织也是如此(在我们特定的情况下,父进程可以在长时间运行的子进程之前死亡,在这种情况下,更新无需像exec一样等待子进程就可以完成)。

我们有一个由节点(父)应用程序构建的长连接的("… ; … ; …")命令,但是就像spawn("echo stuff >>stderr.log")不起作用,只有spawn('ls', [-l])一样,我显然不能链接命令(因为他也引用了该命令)文档和SO上的多次。

TLDR;

我们需要使用spawn,但是spawn无法处理链接的Shell命令。
我现在是否真的需要用bash编写命令并执行该命令,这真的是唯一的选择吗?

谢谢

最佳答案

注意shellspawn选项:


  如果为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/

10-12 23:41