Początkowo kill
polecenie mogło zabić tylko proces, dopiero później zostało kill
ulepszone, aby umożliwić wysyłanie dowolnego sygnału.
Od wersji 7 Uniksa (1979) domyślnie było sygnalizowanie procesu w sposób, który można złapać i albo obsłużyć z wdziękiem, albo zignorować (wysyłając sygnał SIGTERM ), ale można go również użyć do wyciągnięcia dywanu spod spodu proces (a kill -9
wysyła sygnał SIGKILL , którego nie można złapać, a zatem nie można go zignorować).
tło
Komputery, a zwłaszcza Unix, są pełne metafory.
Główną metaforą procesów jest żywa istota, która się rodzi, żyje i umiera.
W Uniksie wszystkie procesy oprócz init mają rodziców , a każdy proces, który spawnuje inne procesy, ma potomki . Procesy mogą się stać osierocone (jeśli ich rodzic umrze), a nawet mogą stać się zombie , jeśli zatrzymają się po śmierci.
Zatem kill
polecenie pasuje do tej metafory.
Archeologia Uniksowa
Na stronie podręcznika z wersji 4 systemu Unix (wersja, w której kill
został wprowadzony wraz z ps
) znajdujemy:
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)
Szczególnie podoba mi się ostatnia sekcja tej strony podręcznika:
BUGS
Clearly people should only be allowed to kill
processes owned by them, and having the same typewriter
is neither necessary nor sufficient.
Zanim pojawiło się piąte wydanie, kill
polecenie zostało już przeciążone, aby umożliwić wysłanie dowolnego sygnału.
Z Unix Programmers Manual, wydanie piąte (p70):
If a signal number preceded by "-" is given
as an argument, that signal is sent instead of
kill (see signal (II)).
Domyślnie jednak wysyłano sygnał 9, ponieważ sygnał 15 jeszcze nie istniał (patrz p150).
W wersji 6kill
strona podręcznika nie wspomniała już o tej samej maszynie do pisania błędzie .
Dopiero w wersji 7 Uniksa wprowadzono sygnał 15 (patrz strony man dla signal (2) i kill (1) dla v7) i kill
przełączono na to, zamiast używać sygnału 9.