2016-09-29 35 views
1

我正在製作一個Elixir應用程序(使用GenServer),該應用程序在啓動時會生成一個外部Node.js服務器,並在退出時將其關閉。我成功地啓動了Node.js服務器,但無法關閉它。如何關閉已啓動的外部進程?

所以我的問題是,我怎麼能關閉一個外部進程:我使用目前嘗試我是從Elixir開始的?


Relevant Discussion上ElixirForum

回答

0

好了,等Unix Signals and Traps做一些研究,並通過多封電子郵件上的Elixir ForumErlang Mailing List和討論會後,事實證明:

當進程退出(端口關閉),產生的程序/端口 應在STDIN上得到EOF。這是進程檢測端口何時關閉的「標準」方式:STDIN上的文件結束。

其他程序應STDIN和關機妥善處理EOF這應該適用於大多數程序,但是對於我的Node.js服務器而言,它不會發生。所以,我在我的應用程序和退出手動處理這種情況:

process.stdin.on('end',() => { 
    console.log("STDIN closed"); 
    process.exit(); 
}); 

我仍然認爲,應該有一個方法來強制殺死(即,或者發送SIGINTSIGTERM來)從藥劑外部程序/二郎。

+0

帶有附加goon可執行文件的瓷器庫是在一般情況下處理此問題的一種方法。 –

+0

你能否詳細說明w/examplesFredtheMagicWonderDog?我怎樣才能用'goon'驅動程序發送'SIGTERM'或'SIGINT'? – Sheharyar

+0

goon可執行文件實質上是一個包裝器,它接受來自Porcelain庫的消息來實現標準信號(以及其他很好的東西)。 –