중단 된 프로세스를 종료 하시겠습니까?


17

나는 약간 혼란 스러웠다.

% vim tmp
zsh: suspended   vim tmp
% kill %1
% jobs
[1]  + suspended   vim tmp
% kill -SIGINT %1
% jobs
[1]  + suspended   vim tmp
% kill -INT %1
% jobs
[1]  + suspended   vim tmp

그래서 나는 "직접 스스로"사임하고 ​​나중에 왜 궁금해 :

% fg
[1]  - continued   vim tmp
Vim: Caught deadly signal TERM
Vim: Finished.
zsh: terminated   vim tmp
%

오!

차종은 지금은 그것에 대해 생각, 즉, 정말로 감지 vim그것의 신호 처리기를 종료하고, 그렇게 말 할 수의 순서를 실행해야합니다.

그러나 분명히 내가 의도 한 것은 아닙니다.

단일 명령으로 "깨어나서 종료"할 수있는 방법이 있습니까? 즉, kill %N && fg %N? 에 대한 기본 제공 별칭

백그라운드에서 재개가 작동하지 않는 이유는 무엇입니까? 만약 내가 bg대신에 fg, Vim은 내가까지 fg직관을 깨뜨릴 때까지 살아 있습니다.

답변:


20

vi-vi-vi악마의 것입니다. 불로 죽여야합니다. 또는 SIGKILL:

kill -KILL %1

내장 killSIGCONT일시 중지 된 프로세스 로 보낼 수 있을 정도로 친절 하여 직접 처리 할 필요는 없지만 프로세스가 보내는 신호를 차단하거나 신호를 처리하여 프로세스가 일시 중단되는 경우 도움이되지 않습니다 다시 백그라운드 프로세스가 터미널에서 읽기를 시도하면 기본적으로 전송 SIGTTIN되어 처리되지 않으면 프로세스가 일시 중단됩니다.


1
왜 지구상에서 SIGABRT를 사용 하시겠습니까? 프로그램 버그를 나타냅니다. SIGKILL은 프로그램을 원하든 원하지 않든 지금 죽이고 싶기 때문에 바로 여기 있습니다.
Gilles 'SO- 악마 그만해'

1
실제로, SIGTERM적어도 처리기가없는 경우 수면 프로세스를 깨우는 것처럼 보입니다 . 나는 신호를 수신하고 떠나기 전에해야 bg하거나 fg무언가 를 기억하기 때문에이 방법으로 작동하지 않았다고 생각합니다 . 그러나 awk 'BEGIN{while(42){}}' &, 및으로 테스트했으며을 사용하여 시스템 호출이 strace kill $!하나뿐입니다 . kill(2)SIGTERM
Peter Cordes

6

vimsigprocmask(2)일반 신호를 무시하도록 신호 처리기 (및 아마도 설정 )를 설치 하여 스트레이 제어 + c 또는 임의 킬 (kill) 신호로 인해 편집중인 파일이 손실되지 않도록합니다. 더 간단한 프로그램이 쉽게 죽습니다.

% cat busyloop.c
int main(void) {
for (;;) { ; }
return 0;
}
% make busyloop
cc     busyloop.c  -o busyloop
% ./busyloop
^Z
zsh: suspended  ./busyloop
% kill %1
%
[1]  + terminated  ./busyloop

만들기 vim출구에서 (안전하게) 신호 핸들러를 필요로 vim그 수용 TERM또는 USR1당신이 만들 필요로 할 려 등이나 뭐, 저장 (폐기 또는?)를 버퍼, vim이 같은 출구를?


"vim exit를 이렇게 만들려면 어떻게해야합니까?" -아무것도, 내가 편집하고있는 것은 정말로 "tmp"파일이었다. vim서스펜션을 테스트하기위한 프로그램이 잘못 선택되었습니다.
OJFord

1
"일반적인 신호를 무시하여 편집중인 파일이 빗나가는 제어 + c 또는 임의 킬 (kill) 킬 (kill) 신호로 인해 손실되지는 않습니다."그러나 fg종료 한 후에는 일시 중지 된 동안에 만 중지 되었습니까?
OJFord

2
@OllieFord : SIGKILL수면 과정 만 깨워 죽을 수 있습니다. 그들이 않습니다에 대한 사용자 정의 핸들러가 일시 중단 된 프로세스 신호를 송신 하지 를 해제합니다. ( SIGCONT물론 계속 신호를 제외 bg하고 fg보내십시오 SIGCONT.)
Peter Cordes
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.