Nodejs_相关问题记录


Nodejs

记录在nodejs学习过程中遇到的一些难点、易混点

1.subprocess.kill([signal])

业务场景: 当需要手动杀死子进程且需要在子进程的exit事件中区分是否是手动关闭

采取的方案:使用kill([signal])携带信号的形式,预期在exit的回调中获取到signal,用来标识

遇到的问题:携带的signal为‘SININT’,结果并未在exit回调中获取到对应signal,‘SINKILL’符合预期

结论😄当传递SIGINT信号时,子进程的exit中获取不到SIGINT,这是因为SIGINT信号的特性,当子进程收到SIGINT信号时,会尝试终止它的执行,但是它可以被捕捉并执行某些操作,而传递SIGKILL信号后,子进程就无法捕捉到这个信号,所以会立即终止它的执行,导致子进程exit事件中能够获取到SIGKILL信号。

const { spawn } = require('node:child_process');
const grep = spawn('grep', ['ssh']);

grep.on('exit', (code, signal) => {
  console.log(`${code}----${signal}`);
});

// Send SIGHUP to process.
grep.kill('SIGINT'); // code: 1  signal: null
grep.kill('SIGKILL'); // code: null  signal: SIGKILL

文章作者: 洪大俊
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 洪大俊 !
评论
  目录