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은 셸 없이 xclip을 실행하기 때문에 발생한 것이라고 생각됩니다. 가설을 테스트하기 위해 동일한 실험을 반복했지만 이번에는 파일에 작성하고 hello대신 xclip을 사용하여 시작했습니다. 전자는 셸 없이 프로세스를 시작할 수 있기 때문입니다(실험 4).job_start()system()

$ 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이 upstart 프로세스의 부모가 다시 지정되었기 때문일 것입니다).

그러면 랩 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)

관련 정보