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プロセスが終了し、クリップボードが空になります。


同じ実験を繰り返しますが、Nvim(実験3)を使用すると、xclipプロセスは終了せず、クリップボードはそのまま残ります。:h vim-differencesNvimのドキュメントを見て、次を見つけました。

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

これにより、問題はVimがシェルを使用してxclipを実行するのに対して、Nvimはシェルなしでxclipを実行するために発生したと考えられます。仮説をテストするために同じ実験を繰り返しましたが、今回はファイルに書き込んでhello代わりにxclipを使って始めました。前者はシェルなしでプロセスを開始できるからです(実験4)。job_start()system()

$ 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


中間シェルの作成がなぜ問題なのか知りたいです。だから、実験2、Vimを終了する前に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がupstartプロセスの親が再割り当てされたため)。

では、Lab 2でVimを終了するとxclipは終了しますが、Lab 4でVimを終了するとxclipが終了しないのはなぜですか?


編集する:

出力$ 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)

ベストアンサー1

おすすめ記事