Multi-command shell 分离 child 处理 WITH spawn() IN Node.js
Multi-command shell AS detached child process WITH spawn() IN Node.js
供参考:https://nodejs.org/api/child_process.html#child_process_options_detached
大家好,
所以我需要 spawn
child child-process, spawn
因为 exec
不允许 options.detached
& child.unref();
,意味着它可以与 parent 解耦,允许 child 到 运行 并自行完成,vice-versa 也是 parent(在我们的特定情况下,parent 进程可以在 long-running child 之前终止,在这种情况下,更新完成而无需像 exec 那样等待 child。
我们有一个由节点 (parent) 应用程序构建的长连接 ("… ; … ; …")
命令,但是像 spawn("echo stuff >>stderr.log")
一样不起作用,只有 spawn('ls', [-l])
,我显然不能链接命令(因为它在他的文档中也被引用并且在 SO 上多次引用。
TLDR;
我们需要使用 spawn
,但 spawn
无法处理链式 shell 命令。
我现在真的需要在 bash 中编写我的命令然后执行吗,这真的是唯一的选择吗??
谢谢
注意 spawn
的 shell
选项:
If true
, runs command inside of a shell. Uses '/bin/sh'
on UNIX, and 'cmd.exe'
on Windows. A different shell can be specified as a string. The shell should understand the -c
switch on UNIX, or /d /s /c
on Windows. Defaults to false
(no shell).
所以:
let child = child_process.spawn('foo; bar; blah', { shell : true });
编辑:如果您使用的 Node 版本不支持此选项,这里有一个替代方案:
let child = child_process.spawn('/bin/sh', [ '-c', 'foo; bar; blah' ]);
供参考:https://nodejs.org/api/child_process.html#child_process_options_detached
大家好,
所以我需要 spawn
child child-process, spawn
因为 exec
不允许 options.detached
& child.unref();
,意味着它可以与 parent 解耦,允许 child 到 运行 并自行完成,vice-versa 也是 parent(在我们的特定情况下,parent 进程可以在 long-running child 之前终止,在这种情况下,更新完成而无需像 exec 那样等待 child。
我们有一个由节点 (parent) 应用程序构建的长连接 ("… ; … ; …")
命令,但是像 spawn("echo stuff >>stderr.log")
一样不起作用,只有 spawn('ls', [-l])
,我显然不能链接命令(因为它在他的文档中也被引用并且在 SO 上多次引用。
TLDR;
我们需要使用 spawn
,但 spawn
无法处理链式 shell 命令。
我现在真的需要在 bash 中编写我的命令然后执行吗,这真的是唯一的选择吗??
谢谢
注意 spawn
的 shell
选项:
If
true
, runs command inside of a shell. Uses'/bin/sh'
on UNIX, and'cmd.exe'
on Windows. A different shell can be specified as a string. The shell should understand the-c
switch on UNIX, or/d /s /c
on Windows. Defaults tofalse
(no shell).
所以:
let child = child_process.spawn('foo; bar; blah', { shell : true });
编辑:如果您使用的 Node 版本不支持此选项,这里有一个替代方案:
let child = child_process.spawn('/bin/sh', [ '-c', 'foo; bar; blah' ]);