2015-06-12 6 views
2

Я использую Перейти на OSX-машину и попытаться сделать программу для открытия внешнего приложения, а затем через несколько секунд закройте ее - приложение, а не выйти из сценария Go.Go - закрыть внешнее приложение

Я использую библиотеку, доступную на https://github.com/skratchdot/open-golang, чтобы запустить приложение, и оно отлично работает. У меня также есть тайм-аут. Но проблема возникает, когда я должен закрыть приложение.

Может кто-нибудь подскажет, как я смогу выйти из приложения?

Заранее спасибо.

+1

Вы должны, вероятно, выполнить внешнюю команду самостоятельно, чтобы вы могли отслеживать ПИД и отправлять соответствующий сигнал. – JimB

ответ

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.

2

Похоже, что эта библиотека скрывает детали, которые вы использовали бы, чтобы закрыть программу, в частности идентификатор процесса (PID).

Если вы запускаете вместо этого пакет os/exec или получаете дескриптор этого PID, вы можете использовать объект Process для уничтожения или отправки сигналов в приложение, чтобы попытаться его закрыть.

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

+2

Использовать 'os/exec': (« StartProcess - это низкоуровневый интерфейс. Пакет os/exec предоставляет интерфейсы более высокого уровня ».) – JimB

Смежные вопросы