【发布时间】:2020-03-29 11:01:07
【问题描述】:
在 NodeJS 中,如何进行 c 级 exec 调用,就像其他语言和运行时允许的那样(例如 Python 的 os.exec() 甚至 Bash 的 exec)?
与child_process 模块(以及迄今为止我为它找到的所有包装器)不同,这意味着用execed 进程完全替换当前的NodeJS 进程。
我的目标是创建一个 NodeJS cli 适配器,您提供一组配置选项,您可以使用它来调度使用相同配置的不同工具,但每个工具对格式(有些需要 ENV VAR,一些命令行参数,有些需要文件,...)。
我寻找这样一个exec 调用的原因是,一旦该工具被分派,我就不会期望 NodeJS 进程会继续存在——它没有理由继续存在。同时,我需要工具成为前台进程(接受所有信号,控制字符,...)。在我看来,可以将所有此类事件从父 NodeJS 转发到子工具(如果我使用 child_process),但从头开始实现似乎有点太多......
干杯!
【问题讨论】:
-
如果您使用
child_process.spawn()并设置detached选项,那么您可以退出您的node.js 进程,新进程将自行运行。阅读文档here。要让您的 node.js 进程真正退出,您可以调用process.exit()或在您启动的新子进程的进程标识符上执行subprocess.unref()。 -
感谢您的回复。我注意到了 detached 选项,但没有注意到文档中关于它的扩展部分。稍微测试一下,似乎可以启动孩子并让父母死亡,但这更像是守护进程。我特别需要让孩子处于前台并让用户能够与之交互。我只能让孩子在周围徘徊,但它的行为就像它只是连接到终端的一半......你介意举一个例子,你开始一个新的 bash 会话吗?