Inizialmente, il kill
comando poteva solo terminare un processo, solo in seguito è stato kill
migliorato per consentire di inviare qualsiasi segnale.
Dalla versione 7 di Unix (1979) il default è stato quello di segnalare il processo in un modo che può essere catturato e gestito con grazia o ignorato (inviando un segnale SIGTERM ), ma può anche essere usato per estrarre il tappeto da sotto un processo (a kill -9
invia un segnale SIGKILL che non può essere catturato e quindi non può essere ignorato).
sfondo
L'informatica e Unix in particolare sono pieni di metafora.
La metafora principale dei processi è quella di un essere vivente che nasce, vive e muore.
In Unix tutti i processi tranne init hanno dei genitori e ogni processo che genera altri processi ha figli . I processi possono diventare orfani (se il loro genitore muore) e possono persino diventare zombi , se rimangono in giro dopo la loro morte.
Pertanto, il kill
comando si adatta a questa metafora.
Unix Archaeology
Dalla pagina di manuale della versione 4 di Unix (la versione in cui è kill
stata introdotta, insieme a ps
) troviamo:
NAME
kill - do in an unwanted process
SYNOPSIS
kill processid ...
DESCRIPTION
Kills the specified processes.
The processid of each asynchronous process
started with `&' is reported by the shell.
Processid's can also be found by using ps (I).
The killed process must have
been started from the same typewriter
as the current user, unless
he is the superuser.
SEE ALSO
ps(I), sh(I)
Mi piace particolarmente la sezione finale di questa pagina man:
BUGS
Clearly people should only be allowed to kill
processes owned by them, and having the same typewriter
is neither necessary nor sufficient.
Al momento della quinta edizione, il kill
comando era già stato sovraccaricato per consentire l'invio di qualsiasi segnale.
Dal manuale dei programmatori Unix, quinta edizione (p70):
If a signal number preceded by "-" is given
as an argument, that signal is sent instead of
kill (see signal (II)).
L'impostazione predefinita era di inviare un segnale 9, poiché il segnale 15 non esisteva ancora (vedi p150).
Con la versione 6 la kill
pagina man non menzionava più lo stesso bug della macchina da scrivere .
Fu solo con la versione 7 di Unix che fu introdotto il segnale 15 (vedere le pagine man del segnale (2) e kill (1) per v7) e si kill
passò a quello invece di usare il segnale 9.