Nodejs中请教 spawn 出来的进程及子进程如何全部 kill 掉?
Nodejs中请教 spawn 出来的进程及子进程如何全部 kill 掉?
linux 下通过 spawn 运行的 X 进程,该 X 进程自己又会生成子进程
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) => {<br> // do something<br>});<br><br>p.stderr.on('data', (data) => {<br> // do something<br>});<br><br>p.on('exit', (err) => {<br> // do something<br>});<br><br>setTimeout(() => {<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秒后调用这个函数来杀掉所有子进程。
注意,在实际应用中,你可能需要根据实际情况调整终止信号(如使用 SIGTERM
或 SIGKILL
)和处理异常的方式。