summaryrefslogtreecommitdiff
path: root/src/util/util_unix.go
diff options
context:
space:
mode:
authorJunegunn Choi <junegunn.c@gmail.com>2018-09-27 15:27:08 +0900
committerJunegunn Choi <junegunn.c@gmail.com>2018-09-28 10:33:52 +0900
commit0d748a0699760003444efca219eb4bb245996008 (patch)
tree791e4849d9bdfb06d013dac96c2197fa2739c0e5 /src/util/util_unix.go
parent27c40dc6b0cc0402b1602b76202be80841329a1d (diff)
downloadfzf-0d748a0699760003444efca219eb4bb245996008.tar.gz
Kill running preview process after 500ms when focus has changed
Close #1383 Close #1384
Diffstat (limited to 'src/util/util_unix.go')
-rw-r--r--src/util/util_unix.go19
1 files changed, 14 insertions, 5 deletions
diff --git a/src/util/util_unix.go b/src/util/util_unix.go
index fc63c027..6331275c 100644
--- a/src/util/util_unix.go
+++ b/src/util/util_unix.go
@@ -9,17 +9,26 @@ import (
)
// ExecCommand executes the given command with $SHELL
-func ExecCommand(command string) *exec.Cmd {
+func ExecCommand(command string, setpgid bool) *exec.Cmd {
shell := os.Getenv("SHELL")
if len(shell) == 0 {
shell = "sh"
}
- return ExecCommandWith(shell, command)
+ return ExecCommandWith(shell, command, setpgid)
}
// ExecCommandWith executes the given command with the specified shell
-func ExecCommandWith(shell string, command string) *exec.Cmd {
- return exec.Command(shell, "-c", command)
+func ExecCommandWith(shell string, command string, setpgid bool) *exec.Cmd {
+ cmd := exec.Command(shell, "-c", command)
+ if setpgid {
+ cmd.SysProcAttr = &syscall.SysProcAttr{Setpgid: true}
+ }
+ return cmd
+}
+
+// KillCommand kills the process for the given command
+func KillCommand(cmd *exec.Cmd) error {
+ return syscall.Kill(-cmd.Process.Pid, syscall.SIGKILL)
}
// IsWindows returns true on Windows
@@ -27,7 +36,7 @@ func IsWindows() bool {
return false
}
-// SetNonBlock executes syscall.SetNonblock on file descriptor
+// SetNonblock executes syscall.SetNonblock on file descriptor
func SetNonblock(file *os.File, nonblock bool) {
syscall.SetNonblock(int(file.Fd()), nonblock)
}