如何在Node.js中向子进程发送信号以暂停/重启进程?
在Node.js中给bash子进程发送暂停/重启信号的方法
你可以直接通过Node.js的ChildProcess实例提供的kill()方法来发送SIGSTOP和SIGCONT信号,无需额外执行系统的kill命令,具体实现如下:
暂停子进程
调用子进程实例的kill()方法,传入'SIGSTOP'参数即可暂停进程,效果和kill -STOP ${k.pid}完全一致:
k.kill('SIGSTOP');
恢复子进程
同样使用kill()方法,传入'SIGCONT'参数就能让暂停的子进程继续执行,对应kill -CONT ${k.pid}的效果:
k.kill('SIGCONT');
完整示例代码
如果需要在逻辑中添加自动暂停/恢复的演示,比如用定时器模拟操作:
const cp = require('child_process'); const k = cp.spawn('bash'); // 让bash执行一个持续输出的循环 k.stdin.end(`while true; do echo "子进程运行中..."; sleep 1; done`); k.stdout.pipe(process.stdout); k.stderr.pipe(process.stderr); // 3秒后暂停子进程 setTimeout(() => { console.log('\n=== 暂停子进程 ==='); k.kill('SIGSTOP'); }, 3000); // 6秒后恢复子进程 setTimeout(() => { console.log('\n=== 恢复子进程 ==='); k.kill('SIGCONT'); }, 6000);
补充说明
- 注意
kill()方法名容易产生误解,它不仅能发送终止信号,还支持发送所有合法的POSIX信号,包括暂停和恢复类信号。 - 信号名称不区分大小写,但通常习惯使用大写形式,现代Node.js版本均支持这些信号。
内容的提问来源于stack exchange,提问作者Alexander Mills
相关产品推荐
相关产品推荐

