mirror of
https://github.com/restic/restic.git
synced 2025-12-11 18:47:50 +00:00
PR #5358 reintroduced a version of the TIOCGPGRP ioctl call that works on all Unix platforms except Linux, due to a bug/inconsistency in x/sys/unix. This commit fixes that by introducing termstatus.Tcgetpgrp. It also introduces termstatus.Getpgrp and termstatus.Tcsetpgrp to deal with the different signature of unix.Getpgrp in Solaris vs. all other Unix platforms and an int-overflowing constant on AIX, so that some AIX/Solaris-specific code can be removed elsewhere and foreground/background detection is done the same everywhere except on Windows.
25 lines
623 B
Go
25 lines
623 B
Go
//go:build unix
|
|
|
|
package termstatus
|
|
|
|
import "github.com/restic/restic/internal/debug"
|
|
|
|
// IsProcessBackground reports whether the current process is running in the
|
|
// background. fd must be a file descriptor for the terminal.
|
|
func IsProcessBackground(fd uintptr) bool {
|
|
bg, err := isProcessBackground(int(fd))
|
|
if err != nil {
|
|
debug.Log("Can't check if we are in the background. Using default behaviour. Error: %s\n", err.Error())
|
|
return false
|
|
}
|
|
return bg
|
|
}
|
|
|
|
func isProcessBackground(fd int) (bg bool, err error) {
|
|
pgid, err := Tcgetpgrp(fd)
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
return pgid != Getpgrp(), nil
|
|
}
|