Por que esse processo xclip é eliminado quando saio do Vim?

Por que esse processo xclip é eliminado quando saio do Vim?

Se eu iniciar o tmux sem configuração:

$ tmux -Ltest -f/dev/null new

então inicie o Vim sem configuração:

$ vim -Nu NONE

então, no Vim, execute o xclip para escrever hellona área de transferência:

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

então saia do Vim:

:q

helloainda está na área de transferência; $ xclip -selection clipboard -osaídas hello.


Se eu repetir o mesmo experimento, mas iniciar o Vim em uma janela dividida do tmux (experimento 2):

$ tmux splitw vim -Nu NONE

assim que saio do Vim, o processo xclip é encerrado e a área de transferência fica vazia.


Se eu repetir o mesmo experimento, mas com Nvim (experimento 3), o processo xclip não será encerrado e a área de transferência persistirá. Dei uma olhada :h vim-differencesna documentação do Nvim e encontrei isto:

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

Isso me fez pensar que o problema se deve ao fato do Vim iniciar o xclip com um shell, enquanto o Nvim inicia sem. Para verificar minha hipótese, repeti o mesmo experimento, mas desta vez escrevi helloem um arquivo e iniciei o xclip com job_start()em vez de system(), pois o primeiro pode iniciar um processo sem 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

E, de fato, depois de sair do Vim, o processo xclip ainda está ativo e a área de transferência ainda contém arquivos hello.


Eu queria entender por que a criação de um shell intermediário era um problema. Então, emexperimento 2, antes de sair do Vim, verifiquei os ancestrais do processo xclip:

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

A mesma coisa emexperimento 4:

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

A árvore de processos é idêntica e não consigo ver o shell intermediário criado pelo Vim (talvez porque ele foi eliminado e o xclip foi reparado para o processo inicial).

Então, por que o xclip é eliminado quando saio do Vim no experimento 2, mas não quando saio do Vim no experimento 4?


Editar:

Saída 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

Saída de $ vim --version | head -n2:

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

Saída de $ tmux -V:

tmux next-3.1

Saída de $ zsh --version:

zsh 5.7.1 (x86_64-pc-linux-gnu)

informação relacionada