// +build darwin linux package main import ( "errors" "os" "syscall" "golang.org/x/sys/unix" ) func (j *job) foreground() error { if jobs.foreground { return errors.New("(another) job already foregrounded") } pgid, _ := syscall.Getpgid(j.pid) // tcsetpgrp unix.IoctlSetPointerInt(0, unix.TIOCSPGRP, pgid) proc, _ := os.FindProcess(j.pid) proc.Wait() hshPgid, _ := syscall.Getpgid(os.Getpid()) unix.IoctlSetPointerInt(0, unix.TIOCSPGRP, hshPgid) return nil } func (j *job) background() error { proc := j.handle.Process if proc == nil { return nil } proc.Signal(syscall.SIGCONT) return nil }