signal
{number|string}- 返回: {boolean}
subprocess.kill()
方法会向子进程发送一个信号。
如果没有给定参数,则进程将会发送 'SIGTERM'
信号。
参见 signal(7) 了解可用的信号列表。
如果 kill(2) 成功,则此函数返回 true
,否则返回 false
。
const { spawn } = require('child_process');
const grep = spawn('grep', ['ssh']);
grep.on('close', (code, signal) => {
console.log(`子进程因收到信号 ${signal} 而终止`);
});
// 发送 SIGHUP 到进程。
grep.kill('SIGHUP');
如果信号没有被送达,则 [ChildProcess
] 对象可能会触发 ['error'
] 事件。
向一个已经退出的子进程发送信号不是一个错误,但可能有无法预料的后果。
具体来说,如果进程的标识符 PID 已经被重新分配给其他进程,则信号将会被发送到该进程,而这可能产生意外的结果。
虽然该函数被称为 kill
,但传给子进程的信号可能实际上不会终止该进程。
参见 kill(2)。
在 Linux 上,子进程的子进程在试图杀死其父进程时将不会被终止。
当在 shell 中运行新进程、或使用 ChildProcess
的 shell
选项时,可能会发生这种情况:
'use strict';
const { spawn } = require('child_process');
const subprocess = spawn(
'sh',
[
'-c',
`node -e "setInterval(() => {
console.log(process.pid, 'is alive')
}, 500);"`
], {
stdio: ['inherit', 'inherit', 'inherit']
}
);
setTimeout(() => {
subprocess.kill(); // 不会终止 shell 中的 Node.js 进程。
}, 2000);