Чому так називається команда «вбити»?


17

Чому було прийнято рішення називати killкоманду «вбити»?

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

Це не трохи заплутано? Можливо, є якісь історичні причини.

Я знаю, man killщо ця команда з'явилася у версії 3 AT&T UNIX.


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 ), але його також можна використовувати для витягування килима з-під процес ( 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 (див. Див. Сигнал (2) та убий (1) man сторінки для v7) і killперейшов на це, а не використовуючи сигнал 9.


26

Це Unix.

kill здатний не вбивати процес.

mv вміє перейменовувати і не тільки переміщувати файли з одного місця в інше.

touch здатний створити файл і не тільки змінити його останній час модифікації.

od означає Octal Dump, але здатний виконувати ще багато видів смітників.

yes вміє виводити ні.

Більш екзотичні:

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

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

yaccозначає ще один компілятор компілятора. Зауважте, що bisonце GAU yacc.


17
Щоб бути абсолютно справедливим, різниця між переміщенням і перейменуванням файлу є досить довільною. "Перейменування" файлу просто переміщує його в інше місце, яке, можливо, знаходиться в одному каталозі.
Тихон Єлвіс

mv створити новий inode (?) і перемістить посилання на вміст файлу зі старого inode до нового. За винятком випадків, коли це не на одному пристрої. Потім він копіює вміст і видаляє вклад.
Павло

3
Також цікаво те, що ви можете mv / rm файл, відкритий іншим процесом. В іншому процесі все ще є посилання на вміст файлу. Відмінна від інших ОС
Пол

+1 за те, що плутати мене з так, також означає ні
Джеймі Тейлор,

@Paul - Мій Unix досить іржавий, але я думаю, у вас це трохи відстало. Inode - це унікальний ідентифікатор файлу. Отже, у тому ж випадку пристрою створюється нова запис каталогу, що вказує на той самий inode, а потім початковий запис каталогу видаляється. Цікаво, чому 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, яка, безумовно, найкраща метафора.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.