去 - 关闭外部应用程序

时间:2015-06-12 13:06:36

标签: macos go

我在OSX计算机上使用Go并尝试创建程序以打开外部应用程序,然后几秒钟后关闭它 - 应用程序,而不是退出Go脚本。

我正在使用https://github.com/skratchdot/open-golang上提供的库来启动应用程序,它运行正常。我也已经有超时运行了。但是当我必须关闭应用程序时,问题就出现了。

有人会暗示我将如何退出应用程序吗?

提前致谢。

2 个答案:

答案 0 :(得分:2)

看起来该库隐藏了用于关闭程序的详细信息,特别是进程ID(PID)。

如果您使用os / exec软件包启动或获取该PID的句柄,那么您可以使用Process对象终止或向应用程序发送信号以尝试正常关闭它。

https://golang.org/pkg/os/#Process

答案 1 :(得分:1)

谢谢你们的帮助。我可以用以下代码做我正在尝试的事情。

cmd := exec.Command(path string)
    err := cmd.Start()
  if err != nil {
    log.Printf("Command finished with error: %v", err)
  }
  done := make(chan error, 1)
  go func() {
    done <- cmd.Wait()
  }()
  select {
  case <-time.After(30 * time.Second):      // Kills the process after 30 seconds
    if err := cmd.Process.Kill(); err != nil {
      log.Fatal("failed to kill: ", err)
    }
    <-done // allow goroutine to exit
    log.Println("process killed")
    indexInit()
    case err := <-done:
      if err!=nil{
        log.Printf("process done with error = %v", err)
      }
  }
    if err != nil {
        log.Fatal(err)
    }
    log.Printf("Waiting for command to finish...")
  //timer() // The time goes by...
    err = cmd.Wait()
}

我在使用 os / exec 程序包启动应用程序之后立即将其放置为@JimB推荐。