为什么这样叫“ kill”命令?


17

为什么决定将kill命令称为“ kill”?

我的意思是,是的,该实用程序通常用于终止进程,但实际上可以用于发送任何信号。

有点混乱吗?也许有一些历史原因。

我所知道的man kill是该命令出现在版本3 AT&T UNIX中。


8
当然,您已经回答了自己的问题,该命令最初是一种终止进程的方法- 很久以前(历史原因)。一旦有了能够发送信号的工具,它几乎不可避免地将被重新利用……
Murph

2
(夸张的)虽然我对纯Unix的经验很少,但这是否与命令名的简短有关?例如,大多数命令都有非常短的名称“ man”,“ ls”,“ cd”,“ mkdir”。可能与终端的80列限制有关。再次,我不能确定,因为我没有大量使用纯Unix的经验
Jamie Taylor

2
@JamieTaylor:我认为使用简短命令名称的主要原因是懒惰。我们不喜欢打字。我最近了解到cd曾经被称为chdir,这绝对是精神错乱!5个字符用于这样的常用操作?我知道人们谁别名lsl;-)
约阿希姆·绍尔

3
因为程序员们懒得打字assassinate他们用它每一次
briddums

1
@shabunc-谢谢,我可以看到我的回答顺序可能是令人误解的,因此我对它进行了重新排序以使其更直接。
Mark Booth

Answers:


23

最初,该kill命令只能杀死一个进程,后来又进行了kill增强,可以发送任何信号。

从Unix的第7版(1979)开始,默认值是以一种可以被捕获并被优雅地处理或忽略的方式(通过发送SIGTERM信号)来发信号通知该过程,但是它也可以用于将地毯从下面拉出。一个进程(a kill -9发送一个SIGKILL信号,该信号不能被捕获,因此不能被忽略)。

背景

计算,尤其是Unix,充满了隐喻。

主隐喻过程是比其出生,生活和模具一个活物。

在Unix中,除init外的所有进程都具有进程,而产生其他进程的任何进程都具有进程。如果进程死后徘徊,则它们可能成为孤立的(如果其父母去世),甚至可能变成僵尸

因此,该kill命令适合这种隐喻。

Unix考古学

在Unix版本4(引入的版本以及)的手册页中,我们发现:killps

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手册页不再提及相同的打字机错误。

只是在Unix版本7中才引入了信号15(请参见v7 的signal(2)kill(1)手册页)并kill切换到该信号,而不是使用信号9。


26

这是Unix。

kill 不能杀死进程。

mv 能够重命名并且不仅可以将文件从一个位置移动到另一个位置。

touch 能够创建文件,而不仅仅是更改其上次修改时间。

od 表示八进制转储,但能够执行更多种转储。

yes 能够输出编号

更奇特的:

greped执行相同操作的命令命名:g/re/p

awk 以其作者Aho,Weinberger和Kernighan命名。

yacc表示“另一个编译器”。请注意,这bison是GNU yacc。


17
公平地说,移动和重命名文件之间的区别相当随意。“重命名”文件只是将其移动到恰好位于同一目录中的其他位置。
蒂洪·耶维斯

mv创建一个新的inode(?)并将对文件内容的引用从旧的inode移到新的inode。除非不在同一台设备上。然后,它复制内容并删除索引节点。
保罗

3
有趣的是,您可以mv / rm由另一个进程打开的文件。另一个过程仍然引用文件内容。与其他操作系统不同
Paul Paul

+1是对我的混淆,也意味着不对
杰米·泰勒

@Paul-我的Unix很生锈,但我认为您有点落后了。索引节点是文件的唯一标识符。因此,在相同设备的情况下,将创建一个指向相同inode的新目录条目,然后删除原始目录条目。我不知道苹果为什么没有针对“ inode”提起诉讼。
OldFart 2012年

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,这无疑是最好的隐喻。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.