命令运行

2018-02-23  本文已影响20人  Gopal

运行一个命令

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)
运行结果

原因

命令行知识小结
window下
查找所有的进程
netstat -ano
查看某个端口号的进程
netstat -ano|findstr 端口号
根据进程号找到对应的进程名称
tasklist|findstr 进程号
根据端口号杀死进程
taskkill /F /pid 端口号

关闭端口 根据进程号寻找进程名称 Windows中杀死占用某个端口的进程

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去查找端口得出的结果可能跟其他平台的查找是否为一样的?

不同平台下杀死进程的方法有可能是不一样的,怎样去很好的避免?

上一篇 下一篇

猜你喜欢

热点阅读