freebsd 信号和杀死进程( 二 )


% ps -ax | grep inetd
198 ?? IWs 0:00.00 inetd -wW
得出 inetd(8) PID号是198 。有时 grep inetd 命令也出现在输出中,这是因为在这方面 ps(1) 也是寻找列表中运行进程 。
使用 kill(1) 去发送信号 。因为 inetd(8) 是由 root启动的,您必须使用 su(1) 去变为 root 用户 。
% su
PassWord:
# /bin/kill -s HUP 198
和大多数 Unix? 命令一样,kill(1) 完成任务之是没有内容输出的 。假如您发送信号给一个不属于您的进程,您会看到 ``kill: PID: Operation not permitted"". 假如输错了PID号,把信号发送到其他进程,那是坏事 。或者您侥幸,把信号发送到不存在的进程,您会看见 ``kill: PID: No such process"".
为什么使用 /bin/kill?: 许多shell提供了内建kill命令,这样,shell就能直接发送信号,而不是运行 /bin/kill 。这点非常有用,但不同shell有不同的语法来指定发送信号的名字,与其试图把它们学完倒不如简单地直接使用 /bin/kill ... 。
发送其他的信号也很相似,只要在命令行替换TERM或KILL就行了 。
Important: 在系统上随意杀死进程是个坏主意,特别是init(8),它的进程ID是1,它非常特殊 。可以运行 /bin/kill -s KILL 1 命令来让系统迅速关机 。当您按下 Return 键时,始终 必须 去详细检查您所运行的 kill(1) 。
Notes
[1] 有点不正确--少数的东西是不能中断的 。例如,假如进程试图从网络上另一个计算机的一个文件读取,而那个的计算机会因为某些原因拿走了这个文件,那这个进程从上术情况来看是“不能中断” 。最终这个进程会超时,典型的两分钟 。一出现超时进程将被杀死 。

推荐阅读