私は起動時に外部Node.jsサーバーを生成し、終了時にシャットダウンするElixirアプリケーション(GenServer
を使用しています)を作っています。 Node.jsサーバーを正常に起動できましたが、シャットダウンできません。開始された外部プロセスをシャットダウンする方法は?
は私の質問であってもPorcelain
パッケージ、私は外部プロセスをシャットダウンすることができますどのようにを:私が現在使用して試してみました私はエリクシルで始まった? ElixirForum
私は起動時に外部Node.jsサーバーを生成し、終了時にシャットダウンするElixirアプリケーション(GenServer
を使用しています)を作っています。 Node.jsサーバーを正常に起動できましたが、シャットダウンできません。開始された外部プロセスをシャットダウンする方法は?
は私の質問であってもPorcelain
パッケージ、私は外部プロセスをシャットダウンすることができますどのようにを:私が現在使用して試してみました私はエリクシルで始まった? 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
を送信)エリクシールから外部プログラムがあるはずだと思います/ Erlang。
追加のgoon実行可能ファイルを持つ磁器ライブラリは、この問題を一般的なケースで処理する1つの方法です。 –
あなたは@FredtheMagicWonderDogの例で詳しく説明できますか? 'goon'ドライバで' SIGTERM'または 'SIGINT'をどのように送ることができますか? – Sheharyar
goon実行ファイルは基本的には、Porcelainライブラリからのメッセージを受け入れて、標準的なシグナル(そして他の素晴らしいものもたくさんあります)を実装するラッパーです。 –