junegunn / fzf

:cherry_blossom: A command-line fuzzy finder
https://junegunn.github.io/fzf/
MIT License
63.68k stars 2.37k forks source link

child processes are not terminated - output redirection unusable #1702

Open mwallner opened 4 years ago

mwallner commented 4 years ago

I've been using fzf on Windows for a while now, but always had trouble when using it with "deeply nested" directory trees.

fzf version

image (installed via Chocolatey)

context

I'm using a PowerShell helper cd-fzf which basically calls fzf and tries to do a set-location on the result:

function cd-fzf {
  Set-Location (Get-Item $(fzf)).Directory.FullName
}

a simpler example

you should be able to redirect the output of fzf to a variable:

$res = $(fzf)

the problem

the above stated examples work all right, iff the current working directory is not "deep", i.e. the child process that's doing the search in the background is able to finish at some point.

I've noticed, that fzf.exe finishes on press of enter, yet a "leftover" cmd.exe runs as long as it needs to list all files in the current directory.

proof

Screenshot 1: (procexp) fzf during runtime, notice the child cmd.exe with pid 1180 1

Screenshot 2: after fzf finished, the child cmd.exe with pid 1180 keeps running, 2

suggested fix

actively kill all child processes before exiting fzf.

janlazo commented 4 years ago

https://github.com/golang/go/issues/17608 https://github.com/junegunn/fzf/pull/1200#issuecomment-357536930 https://github.com/junegunn/fzf/wiki/Windows#relative-filepaths It's a known problem for golang.