Estaba un poco confundido por:
% 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
Así que renuncié a "hacerlo yo mismo" y me pregunto por qué más tarde:
% fg
[1] - continued vim tmp
Vim: Caught deadly signal TERM
Vim: Finished.
zsh: terminated vim tmp
%
Oh!
Tiene sentido realmente, ahora que lo pienso, eso vimtiene que estar ejecutándose para que se le diga a su manejador de señales que abandone, y que lo haga.
Pero obviamente no es lo que pretendía.
¿Hay alguna manera de "despertar y salir" en un solo comando? es decir, un alias incorporado para kill %N && fg %N?
¿Por qué no funciona reanudar en segundo plano? Si yo en bglugar de fg, Vim permanece vivo hasta que yo fg, lo que rompe mi intuición anterior.

SIGTERMque ahora despierta los procesos de sueño, al menos si no tienen controladores para ello. Creo que no solía funcionar de esta manera, ya que recuerdo haber tenido que hacerlobgofgalgo antes de que recibiera la señal y se fuera. Pero probé conawk 'BEGIN{while(42){}}' &, ystrace kill $!, y solo hay unakill(2)llamada al sistema, conSIGTERM.vimestá instalando manejadores de señal (y probablemente también configurandosigprocmask(2)) para ignorar las señales comunes para que los archivos que se están editando no se pierdan debido a un control parásito + c o una señal de eliminación aleatoria. Un programa más simple se elimina fácilmente:Hacer la
vimsalida (de manera segura) requeriría un controlador de señalvimque acepteTERMoUSR1algo, guarde (o descarte) cualquier memoria intermedia, etc. ¿Qué está tratando de hacer para que lavimsalida sea así?fuente
vimfue solo una elección mal concebida del programa para probar la suspensión.fglo dejé, ¿solo se detuvo mientras estuvo suspendido?SIGKILLdespierta un proceso de sueño para que pueda morir. Enviar señales a un proceso suspendido que tiene controladores personalizados para ellos no lo despierta. (Aparte deSIGCONT, la señal de continuación, por supuesto.bgYfgenviarSIGCONT.)