¿Por qué este proceso xclip se cancela cuando salgo de Vim?

¿Por qué este proceso xclip se cancela cuando salgo de Vim?

Si inicio tmux sin configuración:

$ tmux -Ltest -f/dev/null new

luego inicie Vim sin configuración:

$ vim -Nu NONE

luego desde Vim ejecuta xclip para escribir helloen el portapapeles:

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

luego salga de Vim:

:q

hellotodavía está en el portapapeles; $ xclip -selection clipboard -osalidas hello.


Si repito el mismo experimento, pero inicio Vim en una ventana dividida de tmux (experimento 2):

$ tmux splitw vim -Nu NONE

Tan pronto como salgo de Vim, el proceso xclip finaliza y el portapapeles queda vacío.


Si repito el mismo experimento, pero con Nvim (experimento 3), el proceso xclip no finaliza y el portapapeles persiste. Eché un vistazo a :h vim-differencesla documentación de Nvim y encontré esto:

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

Esto me hizo pensar que el problema se debe al hecho de que Vim inicia xclip con un shell, mientras que Nvim lo inicia sin él. Para comprobar mi hipótesis, repetí el mismo experimento, pero esta vez escribí helloen un archivo e inicié xclip con job_start()en lugar de system(), porque el primero puede iniciar un proceso sin shell (experimento 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

Y, de hecho, después de salir de Vim, el proceso xclip sigue activo y el portapapeles todavía contiene archivos hello.


Quería entender por qué la creación de un caparazón intermedio era un problema. Entonces, enexperimento 2, antes de salir de Vim, verifiqué los antepasados ​​del proceso xclip:

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

Lo mismo enexperimento 4:

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

El árbol de procesos es idéntico y no puedo ver el shell intermedio creado por Vim (tal vez porque fue eliminado y xclip fue vinculado al proceso advenedizo).

Entonces, ¿por qué se elimina xclip cuando salgo de Vim en el experimento 2, pero no cuando salgo de Vim en el experimento 4?


Editar:

Salida de $ 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

Salida de $ vim --version | head -n2:

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

Salida de $ tmux -V:

tmux next-3.1

Salida de $ zsh --version:

zsh 5.7.1 (x86_64-pc-linux-gnu)

información relacionada