我在OSX计算机上使用Go并尝试创建程序以打开外部应用程序,然后几秒钟后关闭它 - 应用程序,而不是退出Go脚本。
我正在使用https://github.com/skratchdot/open-golang上提供的库来启动应用程序,它运行正常。我也已经有超时运行了。但是当我必须关闭应用程序时,问题就出现了。
有人会暗示我将如何退出应用程序吗?
提前致谢。
答案 0 :(得分:2)
看起来该库隐藏了用于关闭程序的详细信息,特别是进程ID(PID)。
如果您使用os / exec软件包启动或获取该PID的句柄,那么您可以使用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推荐。