Почему процесс xclip завершается, когда я выхожу из Vim?

Почему процесс xclip завершается, когда я выхожу из Vim?

Если я запускаю tmux без конфигурации:

$ tmux -Ltest -f/dev/null new

затем запустите Vim без конфигурации:

$ vim -Nu NONE

затем из Vim запустите xclip, чтобы записать helloв буфер обмена:

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

затем выйдите из Vim:

:q

helloвсе еще находится в буфере обмена; $ xclip -selection clipboard -oвыводит hello.


Если я повторю тот же эксперимент, но запущу Vim в разделенном окне tmux (эксперимент 2):

$ tmux splitw vim -Nu NONE

как только я выхожу из Vim, процесс xclip завершается и буфер обмена пустеет.


Если я повторю тот же эксперимент, но с Nvim (эксперимент 3), процесс xclip не будет убит, а буфер обмена сохранится. Я посмотрел :h vim-differencesв документации Nvim и нашел это:

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

Это заставило меня подумать, что проблема связана с тем, что Vim запускает xclip с оболочкой, а Nvim — без нее. Чтобы проверить свою гипотезу, я повторил тот же эксперимент, но на этот раз я записал helloфайл и запустил xclip с помощью job_start()вместо 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.


Я хотел понять, почему создание промежуточной оболочки было проблемой. Итак, вэксперимент 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 (возможно, потому, что она была завершена, а xclip был переназначен на процесс upstart).

Так почему же xclip завершается, когда я выхожу из Vim в эксперименте 2, но не завершается, когда я выхожу из Vim в эксперименте 4?


Редактировать:

Вывод $ 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)

Связанный контент