Warum heißt der Befehl "kill" so?

16

Warum wurde beschlossen, den killBefehl "kill" zu nennen ?

Ich meine, ja, dieses Dienstprogramm wird oft verwendet, um Prozesse zu beenden, aber es kann tatsächlich verwendet werden, um ein beliebiges Signal zu senden.

Ist es nicht etwas verwirrend? Vielleicht gibt es einige historische Gründe.

Alles, was ich aus man killdiesem Befehl weiß , ist in Version 3 von AT & T UNIX erschienen.

shabunc
quelle
8
Sicherlich haben Sie Ihre eigene Frage beantwortet. Der Befehl wurde vor langer Zeit (aus historischen Gründen) als Mittel zum Beenden von Prozessen entwickelt . Sobald Sie ein Tool haben, das Signale sendet, ist es fast unvermeidlich, dass es wieder verwendet wird ...
Murph
2
(Übertreibung) Auch wenn ich nur sehr wenig Erfahrung mit Unix habe, könnte dies mit der Kürze der Befehlsnamen zusammenhängen? Die meisten Befehle haben sehr kurze Namen wie "man", "ls", "cd", "mkdir". Möglicherweise hängt es mit der Beschränkung von 80 Spalten für Terminals zusammen. Auch hier kann ich nicht sicher sein, da ich mit reinem Unix keine große Erfahrung habe
Jamie Taylor
2
@JamieTaylor: Ich denke, der Hauptgrund für kurze Befehlsnamen ist Faulheit. Wir tippen nicht gerne viel. Ich habe vor kurzem erfahren, dass das cdfrüher so genannt wurde chdir, was definitiv Wahnsinn ist! 5 Zeichen für eine solche gemeinsame Operation? Ich kenne Leute, die auch lsdazu lpassen ;-)
Joachim Sauer
3
Weil die Programmierer zu faul waren, assassinatejedes Mal, wenn sie es verwendeten, etwas
einzugeben
1
@shabunc - Danke, ich kann sehen, wie die Reihenfolge meiner Antwort irreführend gewesen sein könnte, also habe ich sie neu angeordnet, um eine direktere Antwort zu erhalten.
Mark Booth

Antworten:

22

Ursprünglich konnte der killBefehl nur einen Prozess beenden, wurde aber später killerweitert, damit Sie jedes Signal senden können.

Seit Version 7 von Unix (1979) wird der Prozess standardmäßig so signalisiert, dass er abgefangen und entweder ordnungsgemäß gehandhabt oder ignoriert werden kann (durch Senden eines SIGTERM- Signals). Er kann jedoch auch zum Herausziehen des Teppichs von unten verwendet werden ein Prozess (a kill -9sendet ein SIGKILL- Signal, das nicht abgefangen und somit nicht ignoriert werden kann).

Hintergrund

Computing, und insbesondere Unix, steckt voller Metaphern.

Die Hauptmetapher für Prozesse ist die eines Lebewesens, das geboren wird, lebt und stirbt.

In Unix alle Prozesse außer init haben Eltern , und jedes Verfahren, das laicht anderen Verfahren hat Kinder . Prozesse können verwaist werden (wenn ihre Eltern sterben) und sogar zu Zombies werden , wenn sie nach ihrem Tod herumhängen.

Somit killpasst der Befehl zu dieser Metapher.

Unix-Archäologie

Auf der Handbuchseite ab Version 4 von Unix (die Version kill, mit der eingeführt wurde ps) finden wir:

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)

Besonders gut gefällt mir der letzte Abschnitt dieser Manpage:

BUGS
        Clearly people should only be allowed to kill
        processes owned by them, and having the same typewriter
        is neither necessary nor sufficient.

Bis zur fünften Ausgabe war der killBefehl bereits überladen, um das Senden von Signalen zu ermöglichen.

Aus dem Unix-Programmierhandbuch, 5. Ausgabe (S. 70):

If a signal number preceded by "-" is given
as an argument, that signal is sent instead of
kill (see signal (II)).

Standardmäßig wurde jedoch ein Signal 9 gesendet, da das Signal 15 noch nicht vorhanden war (siehe p150).

Ab Version 6 wurde auf der killManpage nicht mehr derselbe Schreibmaschinenfehler erwähnt .

Erst mit Version 7 von Unix wurde das Signal 15 eingeführt (siehe die Manpages signal (2) und kill (1) für v7) und auf dieses killumgestellt, anstatt das Signal 9 zu verwenden.

Mark Booth
quelle
26

Das ist Unix.

kill kann einen Prozess nicht beenden.

mv kann Dateien umbenennen und nicht nur von einem Ort an einen anderen verschieben.

touch kann eine Datei erstellen und nicht nur deren letzten Änderungszeitpunkt ändern.

od bedeutet Octal Dump, kann aber noch viele andere Arten von Dumps ausführen.

yes kann keine ausgeben.

Exotischer:

grepwird nach dem edBefehl benannt, der dieselbe Operation ausführt:g/re/p

awk ist nach seinen Autoren benannt: Aho, Weinberger und Kernighan.

yaccbedeutet noch ein Compiler Compiler. Beachten Sie, dass dies bisonder GNU-Yacc ist.

mouviciel
quelle
17
Um ganz ehrlich zu sein, ist der Unterschied zwischen dem Verschieben und Umbenennen einer Datei eher willkürlich. Das "Umbenennen" einer Datei bedeutet nur, sie an einen anderen Ort zu verschieben, der sich zufällig im selben Verzeichnis befindet.
Tikhon Jelvis
Ich erstelle einen neuen Inode (?) und verschiebe den Verweis auf den Dateiinhalt von dem alten Inode auf den neuen. Außer wenn es nicht auf demselben Gerät ist. Dann kopiert es den Inhalt und entfernt die Inode.
Paul
3
Was auch Spaß macht, ist, dass Sie eine Datei mv / rm können, die von einem anderen Prozess geöffnet wird. Der andere Prozess hat noch einen Verweis auf den Dateiinhalt. Anders als bei anderen Betriebssystemen
Paul
+1 für mich mit Ja zu verwechseln bedeutet auch Nein
Jamie Taylor
@Paul - Mein Unix ist ziemlich verrostet, aber ich denke du hast es ein bisschen rückwärts. Der Inode ist die eindeutige Kennung der Datei. Im selben Gerätefall wird also ein neuer Verzeichniseintrag erstellt, der auf denselben Inode verweist, und dann wird der ursprüngliche Verzeichniseintrag entfernt. Ich frage mich, warum Apple niemanden wegen "inode" verklagt hat.
OldFart
0

Unix Version 7 tötet Handbuchseitenstatus :

kill - terminate a process with extreme prejudice

und

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

Es gäbe keinen Grund, diesen Befehl nicht kill zu nennen, was mit Sicherheit die beste verfügbare Metapher ist.

jlliagre
quelle