| //go:build !windows |
| // +build !windows |
| |
| package exec |
| |
| import ( |
| "context" |
| "syscall" |
| ) |
| |
| // NoInterruptContext returns a context.Context instance which launches |
| // subprocesses in a difference process group so that they are not killed when |
| // this process is killed. |
| // |
| // On Windows, this function just returns withoutCancel(ctx). |
| func NoInterruptContext(ctx context.Context) context.Context { |
| parent := getCtx(ctx) |
| runFn := func(ctx context.Context, c *Command) error { |
| c.SysProcAttr = &syscall.SysProcAttr{ |
| Setpgid: true, |
| } |
| return parent.runFn(ctx, c) |
| } |
| return NewContext(withoutCancel(ctx), runFn) |
| } |