J'ai été légèrement confus par:
% 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
J'ai donc démissionné de simplement "le faire moi-même" et je me demande pourquoi plus tard:
% fg
[1] - continued vim tmp
Vim: Caught deadly signal TERM
Vim: Finished.
zsh: terminated vim tmp
%
Oh!
Sense vraiment, maintenant que je pense à cela, que vim
doit être exécuté pour que son gestionnaire de signal soit dit de cesser de fumer et de le faire.
Mais évidemment pas ce que j'ai voulu.
Y a-t-il un moyen de "réveiller et quitter" dans une seule commande? C'est-à-dire un alias intégré pour kill %N && fg %N
?
Pourquoi la reprise-t-elle dans le contexte ne fonctionne pas? Si je bg
au lieu de fg
_, Vim reste en vie jusqu'à ce que je fg
, qui brise mon intuition ci-dessus.
vi-vi-vi
est du diable. Vous devez le tuer avec le feu. Ou SIGKILL
:
kill -KILL %1
Les kill
s sont assez gentils pour envoyer SIGCONT
à des processus suspendus afin de ne pas avoir à le faire vous-même, mais cela ne vous aidera pas si le processus bloque le signal que vous envoyez. Ou si la manipulation du signal provoque la suspension des processus (si un processus d'arrière-plan tente de lire à partir du terminal, il sera envoyé par défaut SIGTTIN
, qui suspend le processus s'il est non confiné).
vim
consiste à installer des gestionnaires de signal (et à définir probablement aussi sigprocmask(2)
) pour ignorer les signaux communs afin que tous les fichiers édités ne soient pas perdus en raison d'un signal de jeu de contrôle égaré + C ou de tuer aléatoire. Un programme plus simple est facilement tué:
% 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
Rendre vim
sortie (en toute sécurité) nécessiterait un gestionnaire de signal dans vim
qui accepte TERM
ou USR1
ou quelque chose, sauve (ou se défaçons?) Des tampons, etc. Qu'est-ce que vous essayez de faire pour avoir besoin de faire vim
sortie comme ceci?