2016-09-29 16 views
1

私は起動時に外部Node.jsサーバーを生成し、終了時にシャットダウンするElixirアプリケーション(GenServerを使用しています)を作っています。 Node.jsサーバーを正常に起動できましたが、シャットダウンできません。開始された外部プロセスをシャットダウンする方法は?

は私の質問であってもPorcelainパッケージ、私は外部プロセスをシャットダウンすることができますどのようにを:私が現在使用して試してみました私はエリクシルで始まった? ElixirForum


Relevant Discussion

答えて

0

わかりましたので、Unix Signals and Trapsにいくつかの研究を行うと、Elixir ForumErlang Mailing Listとの議論に多くの電子メールを経由した後、それが判明:

ときプロセスが終了(ポートが閉じている)されたプログラム/ポート はSTDINEOFを得ます。これは、プロセスがポートが閉じられたことを検出するための「標準的な」方法です.STDINのファイルの終わりです。

他のプログラムが正常STDINとシャットダウン時にEOFを処理する必要があります。これは大部分のプログラムではうまくいくはずですが、Node.jsサーバーの場合は発生しませんでした。だから私は手動で私のアプリと出口で、このケースを処理する必要がありました:

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

私はまだ殺すを強制する方法(すなわちいずれかSIGINTまたはSIGTERMを送信)エリクシールから外部プログラムがあるはずだと思います/ Erlang。

+0

追加のgoon実行可能ファイルを持つ磁器ライブラリは、この問題を一般的なケースで処理する1つの方法です。 –

+0

あなたは@FredtheMagicWonderDogの例で詳しく説明できますか? 'goon'ドライバで' SIGTERM'または 'SIGINT'をどのように送ることができますか? – Sheharyar

+0

goon実行ファイルは基本的には、Porcelainライブラリからのメッセージを受け入れて、標準的なシグナル(そして他の素晴らしいものもたくさんあります)を実装するラッパーです。 –

関連する問題