Vim を終了すると、この xclip プロセスが終了されるのはなぜですか?

Vim を終了すると、この xclip プロセスが終了されるのはなぜですか?

設定なしでtmuxを起動した場合:

$ tmux -Ltest -f/dev/null new

次に、設定なしで Vim を起動します。

$ vim -Nu NONE

hello次に、Vim から xclip を実行してクリップボードに書き込みます。

:call system('xclip -selection clipboard', 'hello')

次にVimを終了します:

:q

helloクリップボードにまだ残っています。$ xclip -selection clipboard -o出力しますhello


同じ実験を繰り返しますが、tmux 分割ウィンドウで Vim を起動します (実験 2):

$ tmux splitw vim -Nu NONE

Vim を終了するとすぐに、xclip プロセスが終了し、クリップボードは空になります。


:h vim-differences同じ実験を Nvim で繰り返すと (実験 3)、xclip プロセスは終了せず、クリップボードは保持されます。Nvimのドキュメントを調べたところ、次のことがわかりました。

|system()|, |systemlist()| can run {cmd} directly (without 'shell')

このことから、Vim は xclip をシェルで起動するのに対し、Nvim はシェルなしで起動することが問題の原因であると考えました。仮説を確認するために、同じ実験を繰り返しましたが、今回はhelloファイルに と書き込み、job_start()ではなくで xclip を起動しました。これはsystem()、前者はシェルなしでプロセスを起動できるためです (実験 4)。

$ echo hello >/tmp/file
$ tmux -Ltest -f/dev/null new
$ tmux splitw vim -Nu NONE
:call job_start('xclip -selection clipboard /tmp/file')
:q

そして実際、Vim を終了した後も xclip プロセスはまだ存続しており、クリップボードには がまだ含まれていますhello


私は中間シェルの作成がなぜ問題なのかを理解したかったのです。実験2Vim を終了する前に、xclip プロセスの祖先を確認しました。

$ pstree -s -p $(pidof xclip)
systemd(1)---lightdm(951)---lightdm(1126)---upstart(1156)---xclip(15389)

同じことが実験4:

$ pstree -s -p $(pidof xclip)
systemd(1)---lightdm(951)---lightdm(1126)---upstart(1156)---xclip(18541)

プロセスのツリーは同一であり、Vim によって作成された中間シェルは表示されません (おそらく Vim が強制終了され、xclip が起動プロセスの親として再設定されたため)。

では、実験 2 で Vim を終了したときに xclip が終了されるのに、実験 4 で Vim を終了したときには終了されないのはなぜでしょうか?


編集:

出力$ uname -a:

Linux ubuntu 4.15.0-51-generic #55~16.04.1-Ubuntu SMP Thu May 16 09:24:37 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

出力$ vim --version | head -n2:

VIM - Vi IMproved 8.1 (2018 May 18, compiled May 30 2019 04:42:18)
Included patches: 1-1421

出力$ tmux -V:

tmux next-3.1

出力$ zsh --version:

zsh 5.7.1 (x86_64-pc-linux-gnu)

関連情報