Skip to content

Instantly share code, notes, and snippets.

@caelifer
Created October 6, 2015 18:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save caelifer/bcf77f1be553ad7fac05 to your computer and use it in GitHub Desktop.
Save caelifer/bcf77f1be553ad7fac05 to your computer and use it in GitHub Desktop.
package main
import (
"log"
"os"
"os/exec"
"syscall"
"time"
)
func main() {
path := os.Getenv("PATH")
os.Setenv("PATH", path+":.")
// start sub-command as a group leader
cmd := exec.Command("parent.sh")
cmd.SysProcAttr = &syscall.SysProcAttr{Setpgid: true}
if err := cmd.Start(); err != nil {
log.Fatal("Failed to Start(): " + err.Error())
}
// sleep 5 second
<-time.After(3 * time.Second)
displayPS()
// kill sub-command
pgid, err := syscall.Getpgid(cmd.Process.Pid)
if err == nil {
if err := syscall.Kill(-pgid, syscall.SIGKILL); err != nil {
log.Fatal("Failed to Kill(): " + err.Error())
}
}
time.Sleep(2 * time.Second)
displayPS()
if err := cmd.Wait(); err != nil {
log.Fatal(err)
}
}
func displayPS() {
cmd := exec.Command("ps")
cmd.Stdout = os.Stdout
if err := cmd.Run(); err != nil {
log.Fatal("Failed to exec 'ps x': " + err.Error())
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment