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은 셸 없이 시작한다는 사실 때문에 발생한다고 생각하게 되었습니다. 가설을 확인하기 위해 동일한 실험을 반복했지만 이번에는 hello파일에 작성하고 job_start()대신 xclip을 시작했습니다 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이 생성한 중간 셸을 볼 수 없습니다(어쩌면 Vim이 종료되고 xclip이 시작 프로세스로 부모가 변경되었기 때문일 수 있음).

그렇다면 실험 2에서 Vim을 종료하면 xclip이 종료되지만, 실험 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)

관련 정보