Fiquei um pouco confuso com:
% 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
Então, renunciei a "fazer sozinho" e me pergunto por que mais tarde:
% fg
[1] - continued vim tmp
Vim: Caught deadly signal TERM
Vim: Finished.
zsh: terminated vim tmp
%
Oh!
Faz sentido, realmente, agora que penso sobre isso, que vim
deve estar em execução para que o manipulador de sinais seja solicitado a sair e fazê-lo.
Mas obviamente não é o que eu pretendia.
Existe uma maneira de "acordar e sair" em um único comando? ou seja, um alias interno para kill %N && fg %N
?
Por que a retomada em segundo plano não funciona? Se eu, em bg
vez de fg
, Vim permanece vivo até eu fg
, o que meio que quebra minha intuição acima.
SIGTERM
processos estão em suspensão, pelo menos se eles não tiverem manipuladores para isso. Eu acho que não costumava trabalhar desta forma, desde que me lembro ter quebg
oufg
algo antes que iria receber o sinal e ir embora. Mas eu testei comawk 'BEGIN{while(42){}}' &
, estrace kill $!
, e há apenas umakill(2)
chamada de sistema, comSIGTERM
.vim
está instalando manipuladores de sinal (e provavelmente também configurandosigprocmask(2)
) para ignorar sinais comuns, para que os arquivos editados não sejam perdidos devido a um controle perdido + c ou um sinal aleatório de interrupção. Um programa mais simples é facilmente eliminado:Fazer a
vim
saída (com segurança) exigiria um manipulador de sinalvim
que aceiteTERM
ouUSR1
algo assim, salve (ou descarte?) Quaisquer buffers, etc. O que você está tentando fazer para fazer avim
saída dessa maneira?fonte
vim
foi apenas uma escolha mal concebida do programa para testar a suspensão.fg
saí, ele parou apenas enquanto foi suspenso?SIGKILL
Acorda apenas um processo de suspensão para que ele possa morrer. O envio de sinais para um processo suspenso que possui manipuladores personalizados para eles não o ativa. (Outros queSIGCONT
, o sinal de continuar, é claro.bg
Efg
enviarSIGCONT
.)