node进程监听ctrl+c信号结束(shell脚本)

1,612 阅读1分钟

问题的起源是@tarojs/plugin-mock 使用mock插件时,每次重启taro环境时9527 mock端口不会自动释放,重启时会报错。

后来想的用node脚本shelljs去获取当前9527的进程,然后kill掉相关进程。后来发现@tarojs/plugin-mock 0.0.7版本修复了该问题。是通过箭头ctrl+c信号解决的process.on('SIGINT'

process.on('SIGINT', function() {
    /* DO SOME STUFF HERE */

    process.exit()
})

shelljs 获取9527端口进程,然后kill

const weappPort = 9527
const portFix = () => {
	const port = weappPort
	const shellinfo = shelljs.exec(`lsof -i :${port}`).stdout.trim()
	const processArr = shellinfo.split('\n')
	if (processArr.length === 0) {
		return
	}
	processArr.splice(0, 1) //删除第一项
	processArr.map((processItemLine) => {
		const pid = processItemLine.split(/\s+/)[1]
		// console.log(`监测到端口[port:${port}][pid:${pid}],在运行,结束掉该进程!`)
		shelljs.exec(`kill -9 ${pid}`)
	})
}