1
我正在製作一個Elixir應用程序(使用GenServer
),該應用程序在啓動時會生成一個外部Node.js服務器,並在退出時將其關閉。我成功地啓動了Node.js服務器,但無法關閉它。如何關閉已啓動的外部進程?
所以我的問題是,我怎麼能關閉一個外部進程:我使用目前嘗試我是從Elixir開始的?
Relevant Discussion上ElixirForum
我正在製作一個Elixir應用程序(使用GenServer
),該應用程序在啓動時會生成一個外部Node.js服務器,並在退出時將其關閉。我成功地啓動了Node.js服務器,但無法關閉它。如何關閉已啓動的外部進程?
所以我的問題是,我怎麼能關閉一個外部進程:我使用目前嘗試我是從Elixir開始的?
Relevant Discussion上ElixirForum
好了,等Unix Signals and Traps做一些研究,並通過多封電子郵件上的Elixir Forum的Erlang Mailing List和討論會後,事實證明:
當進程退出(端口關閉),產生的程序/端口 應在
STDIN
上得到EOF
。這是進程檢測端口何時關閉的「標準」方式:STDIN上的文件結束。
其他程序應STDIN
和關機妥善處理EOF
。這應該適用於大多數程序,但是對於我的Node.js服務器而言,它不會發生。所以,我在我的應用程序和退出手動處理這種情況:
process.stdin.on('end',() => {
console.log("STDIN closed");
process.exit();
});
我仍然認爲,應該有一個方法來強制殺死(即,或者發送SIGINT
或SIGTERM
來)從藥劑外部程序/二郎。
帶有附加goon可執行文件的瓷器庫是在一般情況下處理此問題的一種方法。 –
你能否詳細說明w/examplesFredtheMagicWonderDog?我怎樣才能用'goon'驅動程序發送'SIGTERM'或'SIGINT'? – Sheharyar
goon可執行文件實質上是一個包裝器,它接受來自Porcelain庫的消息來實現標準信號(以及其他很好的東西)。 –