Heim  >  Artikel  >  Web-Frontend  >  So beenden Sie den untergeordneten Prozess basierend auf seinem Namen in nodejs

So beenden Sie den untergeordneten Prozess basierend auf seinem Namen in nodejs

WBOY
WBOYOriginal
2023-05-27 20:44:39848Durchsuche

Node.js ist eine JavaScript-Laufumgebung, die auf ereignisgesteuerter, asynchroner E/A basiert und problemlos leistungsstarke und skalierbare Netzwerkanwendungen erstellen kann. Node.js bietet außerdem eine Subprozess-Verwaltungs-API, die die Ausführung von Befehlszeilenprogrammen oder anderen Node.js-Skripten erleichtert.

Wenn wir die Subprozess-API von Node.js verwenden, um einen Befehl auszuführen, müssen wir manchmal den Prozess beenden, während er ausgeführt wird. Normalerweise können wir das Unterprozessobjekt verwenden, um ein Signal von außen zu senden, um den Prozess zu stoppen. Was aber, wenn wir den Prozess direkt anhand seines Namens beenden möchten?

Im Folgenden werde ich vorstellen, wie man einen untergeordneten Prozess basierend auf seinem Namen in Node.js beendet.

  1. Problemhintergrund

In Node.js kann die Subprozess-API verwendet werden, um Prozesse einfach zu starten und zu beenden. Angenommen, wir haben den folgenden Code:

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

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

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

Der obige Code startet einen untergeordneten Node.js-Prozess mit dem Namen child_process.js über die untergeordnete Prozess-API und übergibt nach 5 Sekunden child.kill( ) Methode stoppt den Prozess. Da wir das Objekt des Unterprozesses erhalten haben, können wir die Methode kill() direkt aufrufen, um den Prozess abzubrechen. 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()方法返回的是一个child process对象,我们需要从其stdout中获取命令输出的内容。
  • 可以通过在命令行中执行ps axo command来查看所有正在运行的进程。

采用上述方法,我们就可以根据子进程的名称来杀死该进程了。

  1. 总结

本文介绍了如何在Node.js中根据子进程的名称来杀死该进程。具体而言,我们需要先获取所有正在运行的进程,然后根据进程名字过滤出需要杀死的进程,并最终使用process.kill()

Aber was ist, wenn wir einen bereits laufenden Prozess beenden möchten, anstatt sein Objekt beim Starten des Prozesses abzurufen?

Angenommen, wir haben bereits einen untergeordneten Node.js-Prozess mit dem Namen child_process.js ausgeführt und möchten wissen, wie wir den Prozess beenden können. 🎜
    🎜Lösung🎜🎜🎜Um dieses Problem zu lösen, müssen wir die folgenden Schritte ausführen: 🎜🎜🎜Alle laufenden Prozesse abrufen🎜🎜Filtern Sie die Prozesse heraus, die wir basierend auf dem Prozess beenden müssen Name🎜🎜 Prozess beenden🎜🎜🎜Hier sind die spezifischen Methoden zum Implementieren dieser Schritte:🎜rrreee🎜Im obigen Code verwenden wir die Methode exec(), um alle laufenden Prozesse abzurufen. Anschließend filtern wir die Prozesse heraus, die beendet werden müssen, basierend auf den Prozessnamen node und child_process.js und speichern ihre PIDs in einem Array. Schließlich beenden wir diese Prozesse mit der Methode process.kill(). 🎜🎜Es gibt ein paar Dinge zu beachten: 🎜
    🎜Die Methode exec() gibt ein untergeordnetes Prozessobjekt zurück, und wir müssen den Inhalt der Befehlsausgabe aus seiner Standardausgabe abrufen. 🎜🎜Sie können alle laufenden Prozesse anzeigen, indem Sie ps axo command in der Befehlszeile ausführen. 🎜
🎜Mit der oben genannten Methode können wir den untergeordneten Prozess anhand seines Namens beenden. 🎜
    🎜Zusammenfassung🎜🎜🎜In diesem Artikel wird erklärt, wie man einen untergeordneten Prozess basierend auf seinem Namen in Node.js beendet. Konkret müssen wir zunächst alle laufenden Prozesse abrufen, dann die Prozesse herausfiltern, die beendet werden müssen, basierend auf dem Prozessnamen, und schließlich die Methode process.kill() verwenden, um diese Prozesse zu beenden. 🎜🎜Es ist erwähnenswert, dass die obige Methode nicht auf Windows-Systeme anwendbar ist, da dieses System nicht über einen ps-Befehl ähnlich wie Linux verfügt. Wenn Sie diese Funktion unter Windows implementieren müssen, können Sie erwägen, einige Bibliotheken von Drittanbietern zu verwenden oder die Betriebssystem-API direkt aufzurufen, um sie zu implementieren. 🎜

Das obige ist der detaillierte Inhalt vonSo beenden Sie den untergeordneten Prozess basierend auf seinem Namen in nodejs. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn