[英]NodeJS exec without creating a child process
在 NodeJS 中,如何像其他語言和運行時允許的那樣(例如 Python 的os.exec()
甚至 Bash 的exec
)進行 c 級exec
調用?
與child_process
模塊(以及我迄今為止為它找到的所有包裝器)不同,這意味着用exec
ed 進程完全替換當前的 NodeJS 進程。
我的目標是創建一個 NodeJS cli 適配器,您提供一組配置選項,您可以使用它來調度使用相同配置的不同工具,但每個工具對格式都有不同的期望(有些期望 ENV VAR,一些命令行參數,一些需要文件,...)。
我尋找這樣一個exec
調用的原因是,一旦該工具被分派,我就不期望 NodeJS 進程會繼續存在——它沒有理由繼續存在。 同時,我需要工具成為前台進程(接受所有信號,控制字符,...)。 在我看來,可以將所有此類事件從父child_process
到子工具(如果我使用child_process
),但從頭開始實現似乎有點太多了......
干杯!
好的,所以我想我終於明白了。 我將此作為答案發布,因為它實際上顯示了一個真實的代碼示例:
child_process.spawnSync(
"bash",
[
"-ic",
["psql"],
],
{
stdio: "inherit",
}
);
process.exit();
這將啟動 bash(帶有控制 tty)並在其中啟動 psql。 按 ctrl-c 不會殺死節點進程; 正如預期的那樣,它被發送到 psql。 我不知道是否有可能以節點進程在 psql 和 bash 之前終止的方式重寫此代碼,但對於我的用例,這樣做是可行的。 也許甚至可以在沒有 bash 的情況下完成它,但我認為bash -i
實際上是這里的關鍵。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.