Node.js est un environnement d'exécution JavaScript basé sur des E/S asynchrones pilotées par des événements, qui peut facilement créer des applications réseau évolutives et hautes performances. Node.js fournit également une API de gestion des sous-processus, facilitant l'exécution de programmes en ligne de commande ou d'autres scripts Node.js.
Lorsque nous utilisons l'API de sous-processus de Node.js pour exécuter une commande, nous pouvons parfois avoir besoin de tuer le processus pendant son exécution. Normalement, nous pouvons utiliser l'objet processus enfant pour envoyer un signal de l'extérieur pour arrêter le processus, mais que se passe-t-il si nous voulons tuer le processus directement en fonction de son nom ?
Ci-dessous, je vais vous présenter comment tuer le processus enfant en fonction de son nom dans Node.js.
Dans Node.js, l'API de sous-processus peut être utilisée pour démarrer et arrêter facilement des processus. Supposons que nous ayons le code suivant :
const { spawn } = require('child_process'); const child = spawn('node', ['child_process.js']); setTimeout(() => { // 杀死子进程 child.kill(); }, 5000);
Le code ci-dessus démarre un processus enfant Node.js nommé child_process.js
via l'API du processus enfant et transmet après 5 secondes. La méthode code>child.kill()
arrête le processus. Puisque nous avons obtenu l'objet du sous-processus, nous pouvons appeler directement la méthode kill()
pour tuer le processus. child_process.js
的Node.js子进程,并在5秒后通过child.kill()
方法停止了该进程。由于我们已经获取到了该子进程的对象,因此可以直接调用kill()
方法杀死该进程。
但如果我们想要杀死一个已经在运行的进程,而不是在启动进程时获取其对象,该怎么办呢?
假设我们已经有一个名为child_process.js
的Node.js子进程在运行中,我们想要根据进程的名称(即child_process.js
)来杀死该进程,该如何做呢?
为了解决这个问题,我们需要进行如下步骤:
下面是实现这些步骤的具体方法:
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()
方法来获取所有正在运行的进程。然后,我们根据进程名字node
和child_process.js
过滤出需要杀死的进程,并将它们的PID存入一个数组中。最后,我们使用process.kill()
方法杀死这些进程。
有几个需要注意的地方:
exec()
方法返回的是一个child process对象,我们需要从其stdout中获取命令输出的内容。ps axo command
来查看所有正在运行的进程。采用上述方法,我们就可以根据子进程的名称来杀死该进程了。
本文介绍了如何在Node.js中根据子进程的名称来杀死该进程。具体而言,我们需要先获取所有正在运行的进程,然后根据进程名字过滤出需要杀死的进程,并最终使用process.kill()
child_process.js
en cours d'exécution, et que nous souhaitions le trier en fonction du nom du processus (c'est-à-dire child_process .js
) pour tuer le processus, comment faire ? #🎜🎜#exec()
pour obtenir tous les processus en cours d'exécution. Ensuite, nous filtrons les processus qui doivent être supprimés en fonction des noms de processus node
et child_process.js
, et stockons leurs PID dans un tableau. Enfin, nous tuons ces processus en utilisant la méthode process.kill()
. #🎜🎜##🎜🎜#Il y a plusieurs choses à noter : #🎜🎜#exec()
renvoie un objet processus enfant, à partir duquel nous devons obtenir le contenu de la sortie de commande dans stdout. #🎜🎜##🎜🎜#Vous pouvez afficher tous les processus en cours en exécutant la commande ps axo
dans la ligne de commande. #🎜🎜#process.kill()
pour tuer ces processus. #🎜🎜##🎜🎜#Il convient de noter que la méthode ci-dessus ne s'applique pas aux systèmes Windows, car ce système n'a pas de commande ps similaire à Linux. Si vous devez implémenter cette fonction sous Windows, vous pouvez envisager d'utiliser des bibliothèques tierces ou d'appeler directement l'API du système d'exploitation pour l'implémenter. #🎜🎜#Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!