簡體   English   中英

NodeJS exec 不創建子進程

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM