ホームページ  >  記事  >  ウェブフロントエンド  >  Nodejsの名前に基づいて子プロセスを強制終了する方法

Nodejsの名前に基づいて子プロセスを強制終了する方法

WBOY
WBOYオリジナル
2023-05-27 20:44:39849ブラウズ

Node.js は、イベント駆動型の非同期 I/O に基づく JavaScript 実行環境であり、高性能でスケーラブルなネットワーク アプリケーションを簡単に構築できます。 Node.js はサブプロセス管理 API も提供しており、コマンド ライン プログラムや他の Node.js スクリプトを簡単に実行できます。

Node.js のサブプロセス API を使用してコマンドを実行する場合、実行中のプロセスを強制終了する必要がある場合があります。通常、子プロセス オブジェクトを使用して外部からシグナルを送信してプロセスを停止できますが、名前に基づいてプロセスを直接強制終了したい場合はどうすればよいでしょうか?

以下では、Node.js で子プロセスを名前に基づいて強制終了する方法を紹介します。

  1. 問題の背景

Node.js では、サブプロセス API を使用してプロセスを簡単に開始および終了できます。次のコードがあるとします。

const { spawn } = require('child_process');

const child = spawn('node', ['child_process.js']);

setTimeout(() => {
  // 杀死子进程
  child.kill();
}, 5000);

上記のコードは、子プロセス API を通じて child_process.js という名前の Node.js 子プロセスを開始し、5 秒後に child を渡します。 .kill() メソッドはプロセスを停止します。サブプロセスのオブジェクトを取得したので、kill() メソッドを直接呼び出してプロセスを強制終了できます。

しかし、プロセスの開始時にオブジェクトを取得するのではなく、すでに実行中のプロセスを強制終了したい場合はどうすればよいでしょうか?

child_process.js という名前の Node.js 子プロセスがすでに実行されており、プロセスの名前に基づいてそれを並べ替えたいとします (例: child_process.js) ) プロセスを強制終了するにはどうすればよいですか?

  1. 解決策

この問題を解決するには、次の手順を実行する必要があります:

  1. 実行中のプロセスをすべて取得する
  2. プロセス名に基づいて強制終了する必要があるプロセスをフィルタリングします
  3. プロセスを強制終了します
#これらの手順を実装するための具体的な方法は次のとおりです:

const { exec } = require('child_process');

// 获取所有正在运行的进程
exec('ps axo command', (err, stdout) => {
  if (err) {
    console.error(err);
    return;
  }

  // 根据进程名字过滤出我们需要杀死的进程
  const processList = stdout.split('
')
    .filter(line => line.includes('node'))
    .filter(line => line.includes('child_process.js'))
    .map(line => line.trim())
    .map(line => /(d+)/.exec(line))
    .map(match => match[1]);

  // 杀死该进程
  if (processList.length > 0) {
    processList.forEach(pid => {
      process.kill(pid);
    });
  }
});

上記のコードでは、実行中のすべてのプロセスを取得するために

exec() メソッドを使用しました。次に、プロセス名 nodechild_process.js に基づいて強制終了する必要があるプロセスをフィルターで除外し、それらの PID を配列に保存します。最後に、process.kill() メソッドを使用してこれらのプロセスを強制終了します。

注意すべき点がいくつかあります:

  • #exec()メソッドは子プロセス オブジェクトを返すので、そのオブジェクトからコマンド出力を取得する必要があります。標準出力の内容。
  • コマンド ラインで
  • ps axo コマンドを実行すると、実行中のすべてのプロセスを表示できます。
上記の方法を使用すると、名前に基づいて子プロセスを強制終了できます。

    概要
この記事では、Node.js の名前に基づいて子プロセスを強制終了する方法について説明します。具体的には、最初に実行中のすべてのプロセスを取得し、次にプロセス名に基づいて強制終了する必要があるプロセスを除外し、最後に

process.kill() メソッドを使用してこれらのプロセスを強制終了する必要があります。

Windows システムには Linux のような ps コマンドがないため、上記の方法は Windows システムには適用されないことに注意してください。 Windows でこの関数を実装する必要がある場合は、サードパーティのライブラリを使用するか、オペレーティング システム API を直接呼び出して実装することを検討できます。

以上がNodejsの名前に基づいて子プロセスを強制終了する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。