当SIGINT发生时,NodeJS child_process抛出错误

时间:2017-01-25 11:50:42

标签: javascript node.js process ecmascript-6

如果您运行此代码并在控制台中按Ctrl-C,程序应在循环的当前迭代结束后退出,而不是立即退出。

但是当child_process.exec看到SIGINT时,它会抛出错误。我不希望这种情况发生,相反,即使在SIGINT的情况下,子进程也应始终运行完成,这样我就可以在需要时终止程序(在这种情况下,在当前结束时) while循环),如我的process.on('SIGINT', ...)处理程序

所示

(此代码使用ES6 async / await。此处的pify模块仅用于将child_process.exec转换为Promise,因此您可以await。)

import childprocess from 'child_process'
import pify from 'pify'

const exec = pify(childprocess).exec

let willStop = false;

(async () => {
  try {
    while (!willStop) {
      console.log('start process')
      await exec('curl http://ipv4.download.thinkbroadband.com/5MB.zip >/dev/null 2>&1')
      console.log('finish process')
    }
    console.log('stopped')
  } catch (e) {
    console.log(e.message)
  }
})()

process.on('SIGINT', () => {
  willStop = true
  console.log('will stop')
})

这是我希望看到的内容(^C是输入Ctrl-C的地方)

start process
finish process
start process
^C
will stop
finish process
stopped

这就是我实际看到的内容

start process
finish process
start process
^C
will stop
Command failed: curl http://ipv4.download.thinkbroadband.com/5MB.zip >/dev/null 2>&1

如何更改代码,以便在查看SIGINT时子进程不会立即终止?

0 个答案:

没有答案