Итак, я хотел запустить процесс и уничтожить его, используя мой код Go. Вот код
package main
import (
"fmt"
"os/exec"
"syscall"
)
func main() {
cmd := exec.Command("subl")
cmd.SysProcAttr = &syscall.SysProcAttr{Setpgid: true}
err := cmd.Start()
if err != nil {
fmt.Println(err)
return
}
// wait for the process to complete
err = cmd.Wait()
if err != nil {
fmt.Println(err)
}
time.Sleep(3 * time.Second)
pgid, err := syscall.Getpgid(cmd.Process.Pid)
if err != nil {
fmt.Println(cmd, " can't kill ", err)
}
syscall.Kill(-pgid, 15)
}
Я установил идентификатор группового процесса после прочтения этого ответа, надеясь, что он будет работать Почему Go не уничтожит дочерний процесс правильно?
Но если я открываю такие процессы, как firefox, или возвышенно, он запускает их, но не может их убить, говоря no such process
, но я все равно вижу, что браузер или окно редактора открываются после выхода из моей программы. Как мне правильно убить такие процессы? процессы, которые заканчиваются sh, даже если они работают.