• signal {number|string}
    • 返回: {boolean}

    subprocess.kill() 方法会向子进程发送一个信号。 如果没有给定参数,则进程将会发送 'SIGTERM' 信号。 参见 signal(7) 了解可用的信号列表。 如果 kill(2) 成功,则此函数返回 true,否则返回 false

    1. const { spawn } = require('child_process');
    2. const grep = spawn('grep', ['ssh']);
    3. grep.on('close', (code, signal) => {
    4. console.log(`子进程因收到信号 ${signal} 而终止`);
    5. });
    6. // 发送 SIGHUP 到进程。
    7. grep.kill('SIGHUP');

    如果信号没有被送达,则 [ChildProcess] 对象可能会触发 ['error'] 事件。 向一个已经退出的子进程发送信号不是一个错误,但可能有无法预料的后果。 具体来说,如果进程的标识符 PID 已经被重新分配给其他进程,则信号将会被发送到该进程,而这可能产生意外的结果。

    虽然该函数被称为 kill,但传给子进程的信号可能实际上不会终止该进程。

    参见 kill(2)。

    在 Linux 上,子进程的子进程在试图杀死其父进程时将不会被终止。 当在 shell 中运行新进程、或使用 ChildProcessshell 选项时,可能会发生这种情况:

    1. 'use strict';
    2. const { spawn } = require('child_process');
    3. const subprocess = spawn(
    4. 'sh',
    5. [
    6. '-c',
    7. `node -e "setInterval(() => {
    8. console.log(process.pid, 'is alive')
    9. }, 500);"`
    10. ], {
    11. stdio: ['inherit', 'inherit', 'inherit']
    12. }
    13. );
    14. setTimeout(() => {
    15. subprocess.kill(); // 不会终止 shell 中的 Node.js 进程。
    16. }, 2000);