Node.jsにおけるProcessモジュールの利用法

Processモジュールの概要

Node.jsはシングルスレッドで動作する非同期型サーバーサイド技術ですが、現代のコンピュータはマルチプロセッサ構成が一般的です。Node.jsでは複数プロセスを管理するための3つのモジュールを提供しています。

  • Processモジュール:現在実行中のプロセスにアクセス
  • child_processモジュール:子プロセスの作成と通信
  • clusterモジュール:ポート共有によるクラスタリング機能

ここでは、プロセス情報を取得し、制御するためのProcessモジュールについて詳しく説明します。

標準入出力の利用

Processオブジェクトは、標準入出力(stdin, stdout, stderr)へのアクセス機能を提供します。これはC++や他の言語における標準I/Oと似たような動作を行います。

process.stdin.on('data', (input) => {
    process.stdout.write(`STDOUT: ${input}`);
    process.stderr.write(`STDERR: ${input}`);
});

プロセス信号の処理

Node.jsでは、プロセスに対してOSから送られるシグナルを処理することが可能です。以下は主なシグナルの種類です:

  • SIGUSR1:デバッガ起動時に送信
  • SIGPIPE:切断されたパイプへの書き込み時
  • SIGHUP:コンソールが閉じられた時(Windows)
  • SIGTERM:プロセス終了要求(Windowsでは非対応)
  • SIGINT:Ctrl+C入力時
  • SIGBREAK:Ctrl+Break入力時(Windows)
  • SIGKILL:プロセス強制終了時
  • SIGSTOP:プロセス一時停止時

これらのシグナルは以下のようにイベントリスナーで処理できます:

process.on('SIGINT', () => {
    console.log('SIGINT信号を受信しました');
    process.exit(0);
});

プロセス操作の制御

Processモジュールにはプロセスを操作するためのメソッドが提供されています:

  • abort():abortイベントを発生させ、コアダンプを生成して終了
  • exit([code]):指定された終了コードで終了
  • kill(pid, [signal]):指定したPIDにシグナルを送信
  • nextTick(callback):コールバックを次のイベントループで実行

プロセス情報の取得

Processオブジェクトには、実行中のプロセスに関する詳細な情報が含まれています:

const util = require('util');

console.log(`カレントディレクトリ: ${process.cwd()}`);
console.log(`環境変数: ${JSON.stringify(process.env)}`);
console.log(`コマンドライン引数: ${process.argv.join(', ')}`);
console.log(`Node.js実行パス: ${process.execPath}`);
console.log(`Node.jsバージョン: ${process.version}`);
console.log(`プロセスID: ${process.pid}`);
console.log(`プラットフォーム: ${process.platform}`);
console.log(`アーキテクチャ: ${process.arch}`);
console.log(`メモリ使用量: ${util.inspect(process.memoryUsage())}`);

const start = process.hrtime();
setTimeout(() => {
    const delta = process.hrtime(start);
    console.log(`高精度タイマー: ${delta[0]}秒 ${delta[1]}ナノ秒`);
    console.log(`起動時間: ${process.uptime()}秒`);
}, 1000);

タグ: Node.js Process module child_process Cluster

7月14日 23:46 投稿