Pourquoi la commande «kill» est-elle appelée ainsi?

17

Pourquoi a-t-il été décidé d'appeler la killcommande "tuer"?

Je veux dire, oui, cet utilitaire est souvent utilisé pour terminer les processus, mais il peut en fait être utilisé pour envoyer n'importe quel signal.

N'est-ce pas un peu déroutant? Il y a peut-être des raisons historiques.

Tout ce que je sais de man killcette commande est apparue dans la version 3 AT&T UNIX.

shabunc
la source
8
Vous avez sûrement répondu à votre propre question, la commande est née comme un moyen de mettre fin aux processus - il y a longtemps (raisons historiques). Une fois que vous avez un outil qui envoie des signaux, il est presque inévitable qu'il sera réutilisé ...
Murph
2
(hyperbole) Bien que j'aie très peu d'expérience avec Unix simple, cela pourrait-il être lié à la brièveté des noms de commande? La plupart des commandes ont des noms très courts "man", "ls", "cd" "mkdir" par exemple. C'est peut-être lié à la limite de 80 colonnes pour les terminaux. Encore une fois, je ne peux pas être sûr car je n'ai pas beaucoup d'expérience avec Unix
Jamie Taylor
2
@JamieTaylor: Je pense que la principale raison des noms de commandes courts est la paresse. Nous n'aimons pas beaucoup taper. J'ai récemment appris que l' cdon appelait autrefois chdir, ce qui est définitivement de la folie! 5 caractères pour une opération aussi courante? Je connais des gens qui alias lsà l;-)
Joachim Sauer
3
Parce que les programmeurs étaient trop paresseux pour taper assassinatechaque fois qu'ils l'utilisaient
briddums
1
@shabunc - Merci, je peux voir comment l'ordre de ma réponse a pu être trompeur, donc je l'ai réorganisé pour en faire une réponse plus directe.
Mark Booth

Réponses:

23

À l'origine, la killcommande ne pouvait tuer qu'un processus, mais elle a été killaméliorée ultérieurement pour vous permettre d'envoyer n'importe quel signal.

Depuis la version 7 d'Unix (1979), la valeur par défaut a été de signaler le processus d'une manière qui peut être interceptée et gérée avec élégance ou ignorée (en envoyant un signal SIGTERM ), mais elle peut également être utilisée pour retirer le tapis de sous un processus (a kill -9envoie un signal SIGKILL qui ne peut pas être capturé et ne peut donc pas être ignoré).

Contexte

L'informatique, et Unix en particulier, regorge de métaphores.

La métaphore principale des processus est celle d'un être vivant qui naît, vit et meurt.

Sous Unix, tous les processus sauf init ont des parents , et tout processus qui engendre d' autres processus a des enfants . Les processus peuvent devenir orphelins (si leur parent décède) et peuvent même devenir des zombies , s'ils traînent après leur mort.

Ainsi, la killcommande correspond à cette métaphore.

Archéologie Unix

À partir de la page de manuel de la version 4 d'Unix (la version où a killété introduite, avec ps), nous trouvons:

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)

J'aime particulièrement la dernière section de cette page de manuel:

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

Au moment de la cinquième édition, la killcommande avait déjà été surchargée pour permettre l'envoi de tout signal.

Dans le manuel des programmeurs Unix, cinquième édition (p70):

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

La valeur par défaut était cependant d'envoyer un signal 9, car le signal 15 n'existait pas encore (voir p150).

Avec la version 6, la killpage de manuel ne mentionnait plus le même bogue de machine à écrire .

Ce n'est qu'avec la version 7 d'Unix que le signal 15 a été introduit (voir les pages de manuel signal (2) et kill (1) pour v7) et est killpassé à cela plutôt que d'utiliser le signal 9.

Mark Booth
la source
26

C'est Unix.

kill est capable de ne pas tuer un processus.

mv est capable de renommer et non seulement de déplacer des fichiers d'un endroit à un autre.

touch est capable de créer un fichier et non seulement de changer sa dernière heure de modification.

od signifie Octal Dump, mais est capable d'effectuer de nombreux autres types de vidages.

yes est capable de sortir non.

Plus exotique:

grepest nommé d'après la edcommande qui effectue la même opération:g/re/p

awk porte le nom de ses auteurs: Aho, Weinberger et Kernighan.

yaccsignifie encore un autre compilateur Compilateur. Notez que bisonc'est le GNU yacc.

mouviciel
la source
17
Pour être tout à fait juste, la différence entre déplacer et renommer un fichier est plutôt arbitraire. "Renommer" un fichier le déplace simplement vers un emplacement différent qui se trouve être dans le même répertoire.
Tikhon Jelvis
mv crée un nouvel inode (?) et déplace la référence au contenu du fichier de l'ancien inode vers le nouveau. Sauf quand ce n'est pas sur le même appareil. Il copie ensuite le contenu et supprime l'inode.
Paul
3
Ce qui est aussi amusant, c'est que vous pouvez mv / rm un fichier qui est ouvert par un autre processus. L'autre processus a toujours une référence au contenu du fichier. Différent des autres OS
Paul
+1 pour m'avoir confondu avec oui, ce qui signifie également non
Jamie Taylor
@Paul - Mon Unix est assez rouillé, mais je pense que vous l'avez un peu en arrière. L'inode est l'identifiant unique du fichier. Ainsi, dans le même boîtier de périphérique, une nouvelle entrée de répertoire est créée pointant vers le même inode, puis l'entrée de répertoire d'origine est supprimée. Je me demande pourquoi Apple n'a pas poursuivi quelqu'un pour "inode".
OldFart
0

La page de manuel d' Unix version 7 kill déclare:

kill - terminate a process with extreme prejudice

et

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

Il n'y aurait aucune raison de ne pas appeler cette commande kill qui est certainement la meilleure métaphore disponible.

jlliagre
la source