Dlaczego tak nazywa się polecenie „zabicia”?


17

Dlaczego postanowiono nazwać killpolecenie „zabić”?

To znaczy, tak, to narzędzie jest często używane do kończenia procesów, ale w rzeczywistości może być używane do wysyłania dowolnego sygnału.

Czy to nie jest trochę mylące? Może istnieją jakieś historyczne powody.

Wiem tylko, man killże to polecenie pojawiło się w wersji 3 AT&T UNIX.


8
Z pewnością odpowiedziałeś na własne pytanie, polecenie powstało jako sposób na zakończenie procesów - dawno temu (z przyczyn historycznych). Gdy masz narzędzie, które wysyła sygnały, jest prawie nieuniknione, że zostanie zmienione przeznaczenie ...
Murph

2
(hiperbola) Chociaż mam bardzo małe doświadczenie z prostym Uniksem, czy może to być powiązane ze zwięzłością nazw poleceń? Większość poleceń ma na przykład bardzo krótkie nazwy „man”, „ls”, „cd” „mkdir”. Może ma to związek z limitem 80 kolumn dla terminali. Znów nie jestem pewien, ponieważ nie mam dużego doświadczenia z prostym Uniksem
Jamie Taylor

2
@JamieTaylor: Myślę, że głównym powodem krótkich nazw poleceń jest lenistwo. Nie lubimy dużo pisać. Niedawno dowiedziałem się, że cdkiedyś tak się nazywało chdir, co jest zdecydowanie szaleństwem! 5 znaków dla tak powszechnej operacji? Znam ludzi, którzy alias lsdo l;-)
Joachim Sauer

3
Ponieważ programiści byli zbyt leniwi, by pisać za assassinatekażdym razem, gdy go używali
briddums,

1
@shabunc - Dzięki, widzę, że kolejność mojej odpowiedzi mogła wprowadzać w błąd, dlatego zmieniłem jej kolejność, aby była bardziej bezpośrednia.
Mark Booth

Odpowiedzi:


23

Początkowo killpolecenie mogło zabić tylko proces, dopiero później zostało killulepszone, 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 -9wysył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 killpolecenie pasuje do tej metafory.

Archeologia Uniksowa

Na stronie podręcznika z wersji 4 systemu Unix (wersja, w której killzostał 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, killpolecenie 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 killprzełączono na to, zamiast używać sygnału 9.


26

To jest Unix.

kill jest w stanie nie zabić procesu.

mv potrafi zmieniać nazwy i nie tylko przenosić pliki z jednego miejsca do drugiego.

touch jest w stanie utworzyć plik i nie tylko zmienić czas ostatniej modyfikacji.

od oznacza Octal Dump, ale jest w stanie wykonać wiele innych rodzajów zrzutów.

yes jest w stanie wyprowadzić nr.

Bardziej egzotyczny:

grepnosi nazwę po edkomendzie wykonującej tę samą operację:g/re/p

awk nosi nazwę od autorów: Aho, Weinberger i Kernighan.

yaccoznacza Yet Another Compiler Compiler. Zauważ, że bisonjest to GNU yacc.


17
Aby być całkowicie uczciwym, różnica między przenoszeniem a zmianą nazwy pliku jest raczej arbitralna. „Zmiana nazwy” pliku polega na przeniesieniu go do innej lokalizacji, która znajduje się w tym samym katalogu.
Tikhon Jelvis

mv utwórz nowy i-węzeł (?) i przenosi odwołanie do zawartości pliku ze starego i-węzła na nowy. Z wyjątkiem sytuacji, gdy nie ma go na tym samym urządzeniu. Następnie kopiuje zawartość i usuwa i-węzeł.
Paul

3
Zabawne jest również to, że możesz mv / rm otworzyć plik w innym procesie. Drugi proces nadal ma odniesienie do zawartości pliku. Różni się od innych systemów operacyjnych
Paul

+1 za mylenie mnie z tak oznacza również nie
Jamie Taylor,

@Paul - Mój Uniks jest dość zardzewiały, ale myślę, że masz go trochę zacofanego. I-węzeł jest unikalnym identyfikatorem pliku. Zatem w tym samym przypadku urządzenia tworzony jest nowy wpis katalogu wskazujący na ten sam i-węzeł, a następnie oryginalny wpis katalogu jest usuwany. Zastanawiam się, dlaczego Apple nie pozwał nikogo o „inode”.
OldFart

0

Stany stron podręcznika zabijania dla systemu Unix w wersji 7 :

kill - terminate a process with extreme prejudice

i

This will kill processes that do not catch the signal; in particular `kill -9 ...'  is a sure kill.

Nie byłoby żadnego powodu, aby nie nazywać tego polecenia zabiciem, które jest z pewnością najlepszą dostępną metaforą.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.