NodeJS exec,而不创建子进程



在NodeJS中,如何像其他语言和运行时允许的那样(例如Python的os.exec()甚至Bash的exec(进行c级exec调用?

child_process模块(以及迄今为止我为其找到的所有包装器(不同,这意味着用execed进程完全取代当前的NodeJS进程。

我的目标是创建一个NodeJS cli适配器,您可以提供一组配置选项,并可以使用它来调度使用相同配置的不同工具,但每个工具对格式都有不同的期望(有些期望ENV VAR,有些命令行参数,有些需要文件,…(。

我之所以寻找这样一个exec调用,是因为一旦工具被调度,我就不希望NodeJS进程继续存在——它没有理由继续存在。同时,我需要工具来成为前台进程(接受所有信号、控制字符…(。在我看来,将所有此类事件从父NodeJS转发到子工具是可能的(如果我使用child_process(,但从头开始实现似乎有点太多了。。。

干杯!

好吧,所以我想我终于得到了它。我把它作为一个答案发布,因为它实际上显示了一个真实的代码示例:

child_process.spawnSync(
"bash",
[
"-ic",
["psql"],
],
{
stdio: "inherit",
}
);
process.exit();

这将启动bash(带有控件tty(,并在其中启动psql。按下ctrl-c不会终止节点进程;正如预期的那样,它被发送到psql。我不知道是否有可能以节点进程在psql和bash之前终止的方式重写这段代码,但就我的用例而言,这确实做到了。也许在没有bash的情况下也可以完成,但我认为bash -i实际上是关键。

最新更新