由于职责的要求,你不得不费力地阅读那些令你感到费解的晦涩的Linux应用程序的说明文件。然后,你将运行指令和编辑设置文件。一切都在正常运行,生活真美好。但是,你知道,好时光不会永远持续下去。当你遇到令人恐惧的“send the process a SIGHUP”提示时,好时光结束了。
什么是“SIGHUP(启动信号)”,你如何发送它?它像是你送给你的恋人的一束花吗?虽然你可以肯定这不是一个命令行指令,不过,你还是试着键入它。当然,这没有结果。然后,你检查一下键盘。哦,没有SIGHUP键。于是你又重新阅读这个应用程序的参考指南,看到下面这段文字:
当收到一个hangup(进程结束)信号时,sshd程序会重新阅读配置文件。通过执行启动程序时的命令及选项来发送SIGHUP信号,如:/usr/sbin/sshd。
哦,原来是这样。
程序员 VS 使用者
LINUX程序的在线参考指南作者一般都要既照顾到最终用户的需求也要照顾到高级程序员的需求。因此,有些说明比较难懂。不过,不要担心。现在我们就要揭开覆盖在这些让人迷惑的内容上面那神秘的面纱。
信号与进程控制
这个问题主要属于信号和进程控制的范畴。对于我们系统管理员和普通用户来说,我们主要关心的是启动、停止和重新启动服务、停止失控的进程和被挂起的进程,并且尽可能不中断系统运行。因为不同的操作系统和不同的命令外壳处理信号的方式都不相同,我们这里只介绍Linux操作系统和bash外壳。
信号是用来与守护程序和进程通信的。任何活动任务都是一个进程,而守护程序是等待对某些事件做出反应或者按照日程安排执行任务的后台服务。一个程序必须有建在其中的信号处理程序用于捕获和应答信号。在LINUX中的signal 参考指南解释了各种不同信号和这些信号的用途。信号是由“kill”命令发出的。kill -l命令可以显示一个可用信号列表及其编号。
所有的守护程序和进程都有一个进程ID(PID),例如使用ps命名所显示的内容:
- $ ps aux
- USER PID %CPU %MEM TTY STAT COMMAND
- root 1 0.0 0.1 ? S init [2]
- 105 7783 0.0 0.2 ? Ss /usr/bin/dbus-daemon --system
- hal 7796 0.0 0.7 ? Ss /usr/sbin/hald
- postfix 7957 0.0 0.2 ? S qmgr -l -t fifo -u -c
- nagios 8371 0.0 0.2 ? SNs /usr/sbin/nagios /etc/nagios/nagios.cfg
这个输出是经过简化的。你在系统中可以看到更多的行和栏目。如果某些进程消耗了你的全部CPU或者内存,你可以在这个输出的%CPU和%MEM列中发现它们。找到失控的进程的一种更快捷的方法是使用top命令,因为按照默认的设置,使用占用CPU资源最多的进程在最上面显示。我们可以使用一条“yes”命令来测试一下:
$ yes carla is teh awesum
这个命令将以很高的速度反复显示“carla is teh awesum”,直到你停止它运行。这将使你的CPU使用率达到警戒线。
- $ top
- ...
- PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
- 12144 carla 25 0 31592 17m 13m R 93.4 3.5 0:50.26 konsole
- 22236 carla 15 0 2860 468 400 S 4.3 0.1 0:00.97 yes
分析一下这个结果,你会发现一些有趣的事,你会发现,占用CPU最多的程序是konsole虚拟终端程序,而不是“yes”命令,这是因为“yes”命令是在konsole终端程序中运行的。如果在一个“真正的”控制台(按Ctrl+alt+f2键)中运行同样的命令序列,你将看到“yes”命令被排在***位。
有许多停止“yes”命令运行的方式。如果你要回到运行它的shell中,按CTRL+c键就可以了。或者你可以在另一个shell中用“kill”命令停止“yes”命令的运行,Kill命令后面跟PID或者命令名称,如下如示:
$ kill 22236
或者
$ killall yes
按CTRL+c键发出一个SIGINT(信号2),这个信号是键盘要求取得控制权的中断信号。kill和killall这两个命令按照默认的设置都发出一个SIGTERM信号(编号15)。程序中可以设置对SIGTERM信号(15)是捕捉或者忽略,或者以不同的方式解释。因此,如果你的程序对于KILL命令的反应与你预期不同,很可能是被KILL的目标程序的问题。
终止一个父进程通常也终止了它的子进程。不过,情况并不总是如此。你知道子进程是什么吗?使用ps命令加上-f选项就可以看到,如下所示:
- $ ps axf
- 22371 ? R 2:35 _ konsole [kdeinit]
- 22372 pts/3 Ss 0:00 | _ /bin/bash
- 24322 pts/3 S+ 0:00 | | _ yes carla is teh awesum
- 22381 pts/4 Rs 0:00 | _ /bin/bash
- 24323 pts/4 R+ 0:00 | | _ ps axf
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/jbgtwang/archive/2009/01/08/3734881.aspx
【编辑推荐】