Node.js のプロセス処理を少し学ぶ
IoT をする前に Node.js のプロセス処理について
簡単に学習することにした。
概要
プログラム開始後にキー入力待機状態にし、
入力ごとに以下のように処理を実行させる。
* 「end」と入力するとプログラムを終了する。
* それ以外の場合、「Input: XXXXX」(XXXXX は入力値)と表示する。
<参考文献>
- Node.js v0.11.11 マニュアル & ドキュメンテーション
- プロセス終了時のファイル出力
- Node.js API (process) - シグナルイベント
- (Node.js)EventEmitterでイベントを登録する。
プログラムの内容
ソースコード
// eventsPra.js var fs = require('fs'); // キーの入力待ち状態にする。 process.stdin.resume(); process.stdin.setEncoding('utf8'); // 標準入力終了時のイベント処理 process.stdin.on('end', function() { console.log('END!!'); }); // 入力された1行を読み込んだ時のイベント処理 process.stdin.on('data', function(inputData) { // 末尾の改行を取り除く。 var input = inputData.slice(0, -1); if (input == 'end') { // end が入力された場合、プロセスを終了する。 process.exit(0); } else { console.log('Input: ' + input); } }); // Ctrl + C が入力された場合のイベント処理 process.on('SIGINT', function() { console.log('Ctrl+C!!'); // プロセスを終了する。 process.exit(0); }); // プロセス終了時のイベント処理 process.on('exit', function() { console.log('EXIT!!'); });
挙動確認
プログラムを実行してみる。
//入力 abc end
//出力 Input: abc EXIT!!
次に、プログラム実行中に「Ctrl+C」と入力すると、
^CCtrl+C!! EXIT!!
と表示される。
また、プログラム実行中に「Ctrl+D」と入力すると、
END!! EXIT!!
と表示される。
考察
標準入力からの入力待ちにするには、
process.stdin.resume() の呼び出しが必要です。
そして標準入力のイベント処理は、
「process.stdin.on(イベント名, コールバック関数)」で設定します。
キー入力はイベント名「data」で、
入力値はコールバック関数の第1引数に渡されるようです。
また、「Ctlr+C」と入力するとプロセスに「SIGINT」のシグナルが送られるので、
「Ctrl+C」の入力はこのイベントを拾うことで設定できます。
ただし、「SIGINT」のリスナの登録を行うとプログラム終了の処理が
働かなくなるので、明示的にプロセスを終了させる必要があります。
後書き
今回の内容を踏まえて、次回はLEDの点灯制御を行っていこうかと思います。