elvish/pkg/eval/process_unix.go
Qi Xiao a18aec1ac8 Fixup for #1598.
- Let file:is-tty always take one argument.

- Revert change to eval.ByteOutput.

- Make sys.IsATTY take a FD instead, to avoid the need to use os.NewFile. Using
  os.NewFile can cause the Go runtime to start polling the file, which
  interferes with Elvish's terminal reader.
2022-11-20 16:21:10 +00:00

31 lines
650 B
Go

//go:build !windows && !plan9
package eval
import (
"os"
"os/signal"
"syscall"
"src.elv.sh/pkg/sys"
"src.elv.sh/pkg/sys/eunix"
)
// Process control functions in Unix.
func putSelfInFg() error {
if !sys.IsATTY(os.Stdin.Fd()) {
return nil
}
// If Elvish is in the background, the tcsetpgrp call below will either fail
// (if the process is in an orphaned process group) or stop the process.
// Ignoring TTOU fixes that.
signal.Ignore(syscall.SIGTTOU)
defer signal.Reset(syscall.SIGTTOU)
return eunix.Tcsetpgrp(0, syscall.Getpgrp())
}
func makeSysProcAttr(bg bool) *syscall.SysProcAttr {
return &syscall.SysProcAttr{Setpgid: bg}
}