>  기사  >  웹 프론트엔드  >  nodejs에서 이름을 기반으로 하위 프로세스를 종료하는 방법

nodejs에서 이름을 기반으로 하위 프로세스를 종료하는 방법

WBOY
WBOY원래의
2023-05-27 20:44:39906검색

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( )을 전달합니다. method는 프로세스를 중지합니다. 하위 프로세스의 객체를 얻었으므로 kill() 메서드를 직접 호출하여 프로세스를 종료할 수 있습니다. 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()

하지만 프로세스를 시작할 때 개체를 가져오는 대신 이미 실행 중인 프로세스를 종료하려면 어떻게 해야 할까요?

child_process.js라는 Node.js 하위 프로세스가 이미 실행 중이고 프로세스를 종료하는 방법을 원한다고 가정해 보겠습니다. 🎜
    🎜Solution🎜🎜🎜이 문제를 해결하려면 다음 단계를 수행해야 합니다. 🎜🎜🎜실행 중인 모든 프로세스 가져오기🎜🎜프로세스에 따라 종료해야 하는 프로세스를 필터링합니다. name🎜🎜 프로세스 종료🎜🎜🎜이 단계를 구현하는 구체적인 방법은 다음과 같습니다.🎜rrreee🎜위 코드에서는 exec() 메서드를 사용하여 실행 중인 모든 프로세스를 가져옵니다. 그런 다음 프로세스 이름 nodechild_process.js를 기반으로 종료해야 하는 프로세스를 필터링하고 해당 PID를 배열에 저장합니다. 마지막으로 process.kill() 메서드를 사용하여 이러한 프로세스를 종료합니다. 🎜🎜몇 가지 참고할 사항이 있습니다: 🎜
    🎜 exec() 메서드는 하위 프로세스 개체를 반환하며 표준 출력에서 ​​명령 출력 콘텐츠를 가져와야 합니다. 🎜🎜명령줄에서 ps axo 명령을 실행하면 실행 중인 모든 프로세스를 볼 수 있습니다. 🎜
🎜위 방법을 사용하면 이름을 기준으로 하위 프로세스를 종료할 수 있습니다. 🎜
    🎜Summary🎜🎜🎜이 글에서는 Node.js에서 이름을 기반으로 하위 프로세스를 종료하는 방법을 설명합니다. 특히, 먼저 실행 중인 프로세스를 모두 얻은 다음 프로세스 이름을 기준으로 종료해야 하는 프로세스를 필터링하고 마지막으로 process.kill() 메서드를 사용하여 이러한 프로세스를 종료해야 합니다. 🎜🎜Windows 시스템에는 Linux와 유사한 ps 명령이 없기 때문에 위의 방법이 Windows 시스템에는 적용되지 않는다는 점에 유의할 가치가 있습니다. Windows에서 이 기능을 구현해야 하는 경우 일부 타사 라이브러리를 사용하거나 운영 체제 API를 직접 호출하여 구현하는 것을 고려할 수 있습니다. 🎜

위 내용은 nodejs에서 이름을 기반으로 하위 프로세스를 종료하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.