Warum wird dieser Xclip-Prozess beendet, wenn ich Vim beende?

Warum wird dieser Xclip-Prozess beendet, wenn ich Vim beende?

Wenn ich tmux ohne Konfiguration starte:

$ tmux -Ltest -f/dev/null new

starten Sie dann Vim ohne Konfiguration:

$ vim -Nu NONE

Führen Sie dann von Vim aus xclip aus, um helloin die Zwischenablage zu schreiben:

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

dann beenden Sie Vim:

:q

hellobefindet sich noch in der Zwischenablage; $ xclip -selection clipboard -ogibt aus hello.


Wenn ich das gleiche Experiment wiederhole, Vim aber in einem geteilten Tmux-Fenster starte (Experiment 2):

$ tmux splitw vim -Nu NONE

Sobald ich Vim beende, wird der Xclip-Prozess beendet und die Zwischenablage ist leer.


:h vim-differencesWenn ich das gleiche Experiment wiederhole, aber mit Nvim (Experiment 3), wird der xclip-Prozess nicht beendet und die Zwischenablage bleibt bestehen. Ich habe mir die Dokumentation von Nvim angesehen und Folgendes gefunden:

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

Dies brachte mich auf die Idee, dass das Problem daran liegt, dass Vim xclip mit einer Shell startet, während Nvim es ohne startet. Um meine Hypothese zu überprüfen, wiederholte ich das gleiche Experiment, aber dieses Mal schrieb ich helloin eine Datei und startete xclip mit job_start()statt mit system(), weil ersteres einen Prozess ohne Shell starten kann (Experiment 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

Und tatsächlich ist der xclip-Prozess nach dem Beenden von Vim noch aktiv und die Zwischenablage enthält noch immer hello.


Ich wollte verstehen, warum die Erstellung einer Zwischenschale ein Problem darstellt.Versuch 2, bevor ich Vim beendete, überprüfte ich die Vorgänger des xclip-Prozesses:

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

Dasselbe inVersuch 4:

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

Der Prozessbaum ist identisch und ich kann die von Vim erstellte Zwischen-Shell nicht sehen (vielleicht weil sie beendet wurde und xclip dem Upstart-Prozess neu zugeordnet wurde).

Warum wird xclip beendet, wenn ich Vim in Experiment 2 beende, aber nicht, wenn ich Vim in Experiment 4 beende?


Bearbeiten:

Ausgabe von $ 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

Ausgabe von $ vim --version | head -n2:

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

Ausgabe von $ tmux -V:

tmux next-3.1

Ausgabe von $ zsh --version:

zsh 5.7.1 (x86_64-pc-linux-gnu)

verwandte Informationen