为什么决定将kill
命令称为“ kill”?
我的意思是,是的,该实用程序通常用于终止进程,但实际上可以用于发送任何信号。
有点混乱吗?也许有一些历史原因。
我所知道的man kill
是该命令出现在版本3 AT&T UNIX中。
cd
曾经被称为chdir
,这绝对是精神错乱!5个字符用于这样的常用操作?我知道人们谁别名ls
来l
;-)
assassinate
他们用它每一次
为什么决定将kill
命令称为“ kill”?
我的意思是,是的,该实用程序通常用于终止进程,但实际上可以用于发送任何信号。
有点混乱吗?也许有一些历史原因。
我所知道的man kill
是该命令出现在版本3 AT&T UNIX中。
cd
曾经被称为chdir
,这绝对是精神错乱!5个字符用于这样的常用操作?我知道人们谁别名ls
来l
;-)
assassinate
他们用它每一次
Answers:
最初,该kill
命令只能杀死一个进程,后来又进行了kill
增强,可以发送任何信号。
从Unix的第7版(1979)开始,默认值是以一种可以被捕获并被优雅地处理或忽略的方式(通过发送SIGTERM信号)来发信号通知该过程,但是它也可以用于将地毯从下面拉出。一个进程(a kill -9
发送一个SIGKILL信号,该信号不能被捕获,因此不能被忽略)。
计算,尤其是Unix,充满了隐喻。
主隐喻过程是比其出生,生活和模具一个活物。
在Unix中,除init外的所有进程都具有父进程,而产生其他进程的任何进程都具有子进程。如果进程死后徘徊,则它们可能成为孤立的(如果其父母去世),甚至可能变成僵尸。
因此,该kill
命令适合这种隐喻。
在Unix版本4(引入的版本以及)的手册页中,我们发现: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
手册页不再提及相同的打字机错误。
只是在Unix版本7中才引入了信号15(请参见v7 的signal(2)和kill(1)手册页)并kill
切换到该信号,而不是使用信号9。
这是Unix。
kill
不能杀死进程。
mv
能够重命名并且不仅可以将文件从一个位置移动到另一个位置。
touch
能够创建文件,而不仅仅是更改其上次修改时间。
od
表示八进制转储,但能够执行更多种转储。
yes
能够输出编号
更奇特的:
grep
以ed
执行相同操作的命令命名:g/re/p
awk
以其作者Aho,Weinberger和Kernighan命名。
yacc
表示“另一个编译器”。请注意,这bison
是GNU yacc。