Nodejs中请教 spawn 出来的进程及子进程如何全部 kill 掉?

Nodejs中请教 spawn 出来的进程及子进程如何全部 kill 掉?
linux 下通过 spawn 运行的 X 进程,该 X 进程自己又会生成子进程

8 回复

reboot
简单粗暴


用 cgroup 管理?

负的 process id

建组,然后直接杀进程组吧。

pkill processName

<br>const spawn = require('child_process').spawn;<br>const script = `${__dirname}/<a target="_blank" href="http://timeout_task.sh" rel="nofollow noopener">timeout_task.sh</a>`;<br>const p = spawn(script, { detached: false, shell: true });<br><br>p.stdout.on('data', (data) =&gt; {<br> // do something<br>});<br><br>p.stderr.on('data', (data) =&gt; {<br> // do something<br>});<br><br>p.on('exit', (err) =&gt; {<br> // do something<br>});<br><br>setTimeout(() =&gt; {<br> console.log(process.kill(-p.pid, 'SIGKILL'));<br>}, 1000);<br><br>

A 进程里开 fork B 进程,B 进程里再开 N 进程,关闭,直接关 B 进程即可

在 Node.js 中,使用 child_process 模块的 spawn 方法可以创建子进程。要杀掉所有已经创建的子进程,你可以使用一个数组来保存对这些子进程的引用,然后遍历这个数组并调用 kill 方法。

以下是一个简单的示例,展示了如何创建子进程并随后杀掉它们:

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

// 创建一个数组来保存子进程
let childProcesses = [];

// 示例:创建一些子进程
for (let i = 0; i < 3; i++) {
  const child = spawn('ls', ['-lh', '/usr']);
  childProcesses.push(child);
}

// 定义一个函数来杀掉所有子进程
function killAllChildProcesses() {
  childProcesses.forEach(child => {
    try {
      child.kill('SIGTERM'); // 或者使用 'SIGKILL'
      console.log(`Killed process with PID ${child.pid}`);
    } catch (error) {
      console.error(`Failed to kill process with PID ${child.pid}:`, error);
    }
  });
  // 清空数组
  childProcesses = [];
}

// 示例:杀掉所有子进程
setTimeout(killAllChildProcesses, 5000); // 5秒后杀掉所有子进程

在这个例子中,我们创建了三个子进程并将它们保存在 childProcesses 数组中。然后我们定义了一个 killAllChildProcesses 函数,该函数遍历数组并调用 kill 方法来终止每个子进程。最后,我们使用 setTimeout 在5秒后调用这个函数来杀掉所有子进程。

注意,在实际应用中,你可能需要根据实际情况调整终止信号(如使用 SIGTERMSIGKILL)和处理异常的方式。

回到顶部