运行一个命令
shell.cd(currentProject.path)
this.childProcess = child_process.exec('npm run dev', (error, stdout, stderr) => {
console.log('Gperror: '+ error + 'Gpstdout: ' + stdout + 'Gpstderr: ' + stderr)
})
this.childProcess.stdout.on('data', (data) => {
console.log('dataGp:' + data)
let resultMeg = data
event.sender.send('local-run-reply', resultMeg)
})
停止npm run dev
进程
首先只是杀死上面的this.childProcess
是没有效果的
var childProcessPid = this.childProcess.pid
console.log(childProcessPid)
console.log('isKilled:' + this.childProcess.killed)
this.childProcess.kill()
console.log('isKilled:' + this.childProcess.killed)
运行结果
原因
- 没有杀对进程,因为我再去查看
npm run dev
这个进程的PID和上面杀死的PID是不一样的
命令行知识小结
window下
查找所有的进程
netstat -ano
查看某个端口号的进程
netstat -ano|findstr 端口号
根据进程号找到对应的进程名称
tasklist|findstr 进程号
根据端口号杀死进程
taskkill /F /pid 端口号
Mac下面是有区别的
Mac下的区别具体实现
console.log(process.platform)
var cmd = process.platform == 'win32'?'netstat -ano':'ps aux'
var exec = require('child_process').exec
var port = '8019'
exec(cmd, function(err, stdout, stderr) {
if (err) {
return console.log(err)
}
stdout.split('\n').filter(function(line) {
var p = line.trim().split(/\s+/)
var address = p[1]
console.log(address)
if (address != undefined) {
if (address.split(':')[3] === port) {
if (process.platform === 'win32') {
exec('taskkill /F /pid ' + p[4], function(err, stdout, stderr) {
if(err) {
return console.log('释放指定端口失败!!')
}
console.log('占用指定端口的程序被成功杀掉!')
})
} else {
exec('kill -9 ' + p[4], function(err, stdout, stderr) {
if(err) {
return console.log('释放指定端口失败!!')
}
console.log('占用指定端口的程序被成功杀掉!')
})
}
}
}
})
})
遗留问题
使用netstat -aon
去查找端口得出的结果可能跟其他平台的查找是否为一样的?
不同平台下杀死进程的方法有可能是不一样的,怎样去很好的避免?
网友评论