From 0d748a0699760003444efca219eb4bb245996008 Mon Sep 17 00:00:00 2001 From: Junegunn Choi Date: Thu, 27 Sep 2018 15:27:08 +0900 Subject: Kill running preview process after 500ms when focus has changed Close #1383 Close #1384 --- src/util/util_unix.go | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) (limited to 'src/util/util_unix.go') 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) } -- cgit v1.2.3