| // Copyright 2020 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // +build linux |
| |
| package codifier |
| |
| import ( |
| "os" |
| "os/exec" |
| "syscall" |
| ) |
| |
| // Ensure all child processes are terminated when the parent exits. |
| func terminateChildProcessesAutomatically(cmd *exec.Cmd) { |
| cmd.Env = os.Environ() |
| cmd.SysProcAttr = &syscall.SysProcAttr{ |
| Pdeathsig: syscall.SIGTERM, |
| } |
| cmd.SysProcAttr = &syscall.SysProcAttr{Setpgid: true} |
| } |
| |
| // Terminate the parent and all child processes. |
| func terminateProcessesGroup(cmd *exec.Cmd) error { |
| pgid, err := syscall.Getpgid(cmd.Process.Pid) |
| if err != nil { |
| return err |
| } |
| return syscall.Kill(-pgid, syscall.SIGKILL) // The minus sign indicates process group. |
| } |