如果您运行此代码并在控制台中按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
时子进程不会立即终止?