Почему команда «убить» называется так?

17

Почему было решено назвать killкоманду «убить»?

Я имею в виду, да, эта утилита часто используется для завершения процессов, но на самом деле ее можно использовать для отправки любого сигнала.

Разве это не немного сбивает с толку? Может быть, есть некоторые исторические причины.

Все, что я знаю из man killэтой команды, появилось в Версии 3 AT & T UNIX.

shabunc
источник
8
Конечно, вы ответили на свой вопрос, команда возникла как средство для завершения процессов - давно (исторические причины). Как только у вас есть инструмент, который посылает сигналы, его почти неизбежно, что он будет перепрофилирован ...
Мерф
2
(гипербола) Хотя у меня очень мало опыта работы с прямым Unix, может ли это быть связано с краткостью имен команд? Например, большинство команд имеют очень короткие имена "man", "ls", "cd" "mkdir". Возможно, это связано с лимитом в 80 столбцов для терминалов. Опять же, я не могу быть уверен, так как у меня нет большого опыта работы с Unix
Джейми Тейлор
2
@JamieTaylor: Я думаю, что основной причиной коротких имен команд является лень. Нам не нравится много печатать. Я недавно узнал, что cdраньше называли chdir, что, безусловно, безумие! 5 символов для такой обычной операции? Я знаю людей , которые псевдоним lsв l;-)
Joachim Sauer
3
Поскольку программисты были слишком ленивы, чтобы печатать assassinateкаждый раз, когда они их использовали
briddums
1
@shabunc - Спасибо, я вижу, как порядок моего ответа мог вводить в заблуждение, поэтому я изменил порядок, чтобы сделать его более прямым ответом.
Марк Бут

Ответы:

23

Первоначально killкоманда могла только убить процесс, только позже была killулучшена возможность отправки любого сигнала.

Начиная с версии 7 Unix (1979) по умолчанию сигнализировал процесс так, чтобы его можно было поймать и обработать либо изящно, либо игнорировать (посылая сигнал SIGTERM ), но его также можно использовать для извлечения коврика из-под процесс (a kill -9посылает сигнал SIGKILL, который не может быть перехвачен и, следовательно, не может быть проигнорирован).

Фон

Вычисления, и в частности Unix, изобилуют метафорой.

Основная метафора для процессов - это метафора живого существа, которое рождается, живет и умирает.

В Unix все процессы, кроме init, имеют родителей , а любой процесс, который порождает другие процессы, имеет потомков . Процессы могут стать осиротевшими (если их родитель умирает) и даже могут стать зомби , если они останавливаются после своей смерти.

Таким образом, killкоманда вписывается в эту метафору.

Unix Археология

На странице руководства от версии 4 Unix (версия, в которой killбыла представлена, наряду с ps) мы находим:

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)

Мне особенно нравится последний раздел этой страницы руководства:

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

К тому времени, когда появилось пятое издание, killкоманда уже была перегружена, чтобы можно было отправить любой сигнал.

Из Руководства для программистов Unix, пятое издание (p70):

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

По умолчанию, однако, было послано сигнал 9, так как сигнал 15 еще не существовал (см. P150).

В версии 6 на killстранице руководства больше не упоминалась та же ошибка пишущей машинки .

Только с версией 7 Unix был введен сигнал 15 (см. Справочные страницы signal (2) и kill (1) для v7) и killпереключен на него, а не на использование сигнала 9.

Марк Бут
источник
26

Это Unix.

kill умеет не убивать процесс.

mv способен переименовывать, а не только перемещать файлы из одного места в другое.

touch может создать файл, а не только изменить его время последнего изменения.

od означает Octal Dump, но способен выполнять гораздо больше видов дампов.

yes в состоянии вывести нет.

Более экзотично:

grepназван в честь edкоманды, которая выполняет ту же операцию:g/re/p

awk назван в честь его авторов: Ахо, Вайнбергер и Керниган.

yaccозначает еще один компилятор компилятора. Обратите внимание, что bisonэто GNU yacc.

mouviciel
источник
17
Чтобы быть совершенно справедливым, разница между перемещением и переименованием файла довольно произвольна. «Переименование» файла - это просто перемещение его в другое место, которое находится в том же каталоге.
Тихон Джелвис
mv создает новый индекс (?) и перемещает ссылку на содержимое файла из старого индекса в новый. За исключением случаев, когда он не на том же устройстве. Затем он копирует содержимое и удаляет индекс.
Пол
3
Также интересно то, что вы можете mv / rm файл, открытый другим процессом. Другой процесс все еще имеет ссылку на содержимое файла. Отличается от других ОС
Пол
+1 за то, что я путаю со словом «да» и «нет»
Джейми Тейлор,
@Paul - Мой Unix довольно ржавый, но я думаю, что он у вас немного отсталый. Индод является уникальным идентификатором файла. Таким образом, в том же случае устройства создается новая запись каталога, указывающая на тот же индекс, а затем удаляется исходная запись каталога. Интересно, почему Apple не подала в суд на кого-то из-за "inode".
OldFart
0

Unix версии 7 уничтожает страницы руководства :

kill - terminate a process with extreme prejudice

и

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

Не было бы веской причины не называть эту команду kill, что, безусловно, является лучшей доступной метафорой.

jlliagre
источник