Ich war leicht verwirrt von:
% 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
Also habe ich mich damit abgefunden, es einfach selbst zu tun und mich gefragt, warum es später so ist:
% fg
[1] - continued vim tmp
Vim: Caught deadly signal TERM
Vim: Finished.
zsh: terminated vim tmp
%
Oh!
Es macht wirklich Sinn, jetzt, wo ich darüber nachdenke, dass ausgeführt werden vim
muss, damit der Signal-Handler angewiesen wird, zu beenden und dies zu tun.
Aber offensichtlich nicht das, was ich vorhatte.
Gibt es eine Möglichkeit, mit einem einzigen Befehl "aufzuwachen und zu beenden"? dh ein eingebauter Alias für kill %N && fg %N
?
Warum funktioniert das Fortsetzen im Hintergrund nicht? Wenn ich bg
stattdessen fg
, bleibt Vim am Leben, bis ich fg
, was meine obige Intuition bricht.
SIGTERM
Schlafprozess jetzt aktiviert, zumindest wenn sie keine Handler dafür haben. Ich denke, es hat früher nicht so funktioniert, da ich mich daran erinnere, dass es das Signal empfangen und weggehen musstebg
oderfg
so. Aber ich habe mitawk 'BEGIN{while(42){}}' &
und getestetstrace kill $!
, und es gibt nur einenkill(2)
Systemaufruf mitSIGTERM
.vim
installiert Signal-Handler (und wahrscheinlich auch Einstellungensigprocmask(2)
), um allgemeine Signale zu ignorieren, damit alle Dateien, die bearbeitet werden, nicht aufgrund einer Streukontrolle + c oder eines zufälligen Kill-Signals verloren gehen. Ein einfacheres Programm wird leicht getötet:Das
vim
(sichere) Herstellen eines Exits würde einen Signal-Handler erfordern , der Puffer usw.vim
akzeptiertTERM
oderUSR1
speichert (oder verwirft?). Was möchten Sie tun, um einen solchenvim
Exit durchzuführen?quelle
vim
war nur eine schlecht durchdachte Wahl des Programms zum Testen der Federung.fg
‚d ti habe verlassen, es nur gestoppt, solange sie suspendiert?SIGKILL
einen Schlafprozess auf, damit er sterben kann. Das Senden von Signalen an einen angehaltenen Prozess mit benutzerdefinierten Handlern führt nicht zum Aufwecken. (Abgesehen vonSIGCONT
dem Fortsetzsignal natürlich.bg
Undfg
sendenSIGCONT
.)