控制系统进程
目标要求:
查看系统进程
杀掉僵死进程
计划在一个时刻自动执行命令
计划自动重新执行命令
查看系统进程
进程是系统中运行的程序。所有的进程都被分配给一个唯一的进程标示符(PID)号,用于让kernel跟踪和管理进程。PID号是root用户和其他用户用于标示和控制他们的进程。
使用CDE进程管理
Solaris OS Common Desktop Environment (CDE)提供进程管理用于监视和控制本地系统运行的进程。
你也能够在命令行下使用CDE进程管理:
# /usr/dt/bin/sdtprocess &
使用prstat命令
使用prstat命令检查和显示关于系统中活动进程的信息。
这个命令也可以显示指定进程的信息,UID,(CPU)IDs,或者处理器设置。默认的prstat命令显示的所有信息是以CPU占用率进行排序的。执行prstat命令:
# prstat
PID USERNAME SIZE RSS STATE PRI NICE TIME CPU POCESS/NLWP
1641 root 4864K 4520K cpu0 59 0 0:00:00 0.5% prstat/1
1635 root 1504K 1168K sleep 59 0 0:00:00 0.3% ksh/1
9 root 6096K 4072K sleep 59 0 0:00:29 0.1% svc.configd/11
566 root 82M 30M sleep 29 10 0:00:36 0.1% java/14
1633 root 2232K 1520K sleep 59 0 0:00:00 0.1% in.rlogind/1
531 root 8200K 2928K sleep 59 0 0:00:12 0.1% dtgreet/1
474 root 21M 7168K sleep 59 0 0:00:11 0.1% Xsun/1
236 root 4768K 2184K sleep 59 0 0:00:03 0.0% inetd/4
86 root 3504K 1848K sleep 59 0 0:00:01 0.0% nscd/24
Total: 53 processes, 171 lwps, load averages: 0.02, 0.04, 0.07
退出prstat命令按q键。
Prstat报告的内容
PID 进程的PID号
USERNAME 登陆用户名或者进程UID的所有者
SIZE 进程总体虚拟内存的大小
RSS 进程驻留大小设置Kbyte Mbyte Gbyte.
STATE cpu进程运行在那个CPU上。Sleep进程等待一个事件的完成。Run进程在运行队列中zombie进程停止但是父进程并不等待stop进程停止。
PRI 进程的优先级
NICE 计算优先级的数值
TIME 进程累积运行时间
CPU 进程最近占用CPU的百分比
PRCESS/NLWP 进程名/在进程中的轻量进程号
可以使用priocntl命令来分配进程的优先级和管理进程的优先权。Nice命令只是支持和兼容以前的solaris OS版本。Priocntl命令提供更加灵活的进程管理。
Prstat的命令参数
-a 同一时间分开显示关于进程和用户的报告。
-c 在以前报告的基础上持续输出报告
-n proc 限制输出的行数
-p pidlist 在报告列表中只给出进程的PID。
-s key 按照给出的关键字进行降序排列。这个5个关键字包括cpu time size rss pri 一个时间你可以只使用一个关键字。
-S key 按照给出的关键字进行升序排列。
-t 任何一个用户使用情况的汇总报告
-u euidlist 只报告EUID的进程
-U uidlist 报告真实的UID进程
使用solaris管理台的进程工具
Solaris管理台提供了一个监视和管理系统进程的工具。点击系统状态(system status)然后点进程(process)就可以查看了。
由于是图形界面的看起来比较直观,最主要不知道怎么把图贴上去。所以这里省略了请大家见谅。
Kill僵死进程
你可以使用kill命令和pkill命令发送信号到一个或多个运行的进程。这些命令可以kill进程。
使用kill和pkill命令
你能够使用kill或者pkill命令停止一个或者多个进程。
kill的命令格式如下:
kill -signal PID
显示kill命令所有可以用的信号
kill -l
pkill的命令格式:
pkill -signal Process
在你停止一个进程之前,你必须知道进程的名字或者PID。使用ps或者pgrep命令来定位进程的PID。
下面的例子使用pgrep命令来定位sendmail进程的PID。
#pgrep -l mail
241 sendmail
240 sendmail
#
#pkill sendmail
下面的例子使用ps和kill命令定位和停止sendmail进程。
#ps -e | grep sendmail
241 ? 0:00 sendmail
240 ? 0:02 sendmail
#kill 241
同时停止一个或者多个进程使用下面的命令:
# kill -signal PID PID PID PID
# pkill signal process process
使用kill命令在没有信号的时候默认是发送信号15给进程。这个信号通常是让进程停止。
信号数 信号名 作用 默认工作
1 SIGHUP Hangup Exit
2 SIGINT Interrupt Exit
9 SIGKILL Kill Exit
15 SIGTERM Terminate Exit
1,SIGHUP:是由于电话线或者连接终端停止引起的信号挂起。一些确切的进程比如:inetd,in.named进程挂起引起需要重新读配置文件。
2,SIGINT:通常是ctrl+c键组合来中断进程。
9,SIGKILL:kill进程。进程不能忽略这个信号。
15,SIGTERM:进程停止信号。一些进程忽略这个信号。
查看kill命令的信号量可以使用命令kill –l或者man。
#man -s3head signal
一些进程能够忽略信号15。进程不响应信号15发出的停止信号可以通过强迫使用kill或者pkill命令的信号9。
#kill -9 PID
#pkill -9 process
执行远程登陆
当工作站不响应你的键盘或者鼠标输入的时候,CDE可能僵死。在这种情况下你通过rlogin命令或者telnet命令从另一个系统远程访问工作站。
Kill登陆的僵死进程
当你远程连接系统以后,你可以引入pkill命令停止你工作站的僵死会话。
举例如下:
#rlogin sys-02
Password:
Last login: Sun Oct 24 13:44:51 from sys-01
Sun Microsystems Inc. SunOS 5.10 s10_68 Sep. 20, 2004
#pkill -9 Xsun
or
#ps -e | grep Xsun
442 ? 0:01 Xsun
#kill -9 442
使用SMC来管理进程
这个是一个图形界面便于操作,就不详细描述了。
计划在一个时间上自动执行命令
使用at命令自动处理工作在指定的时间到来的时候。
使用at命令
At命令的格式为:
at -m -q queuename time date
at -r job
at –l
-m 当任务完成以后给予用户mail通知。
-r job 从队列中移出计划工作。
-q queuename 指定要操作的队列
Time 指定命令的处理时间
-l 报告用户的所有计划作业
Date 为指定的命令处理指定一个日期。这个日期是月名,天数或者周中的某一天。
例如下面的例子:创建一个作业在下午9点运行。
#at 9:00 pm
at>find /export/home -name core -exec file {} \; >> /var/tmp/corelog
at>
commands will be executed using /sbin/sh
job 1098648000.a at Mon Oct 25 21:00:00 2004
显示关于作业处理的信息
#at -l 1098648000.a
1098648000.a Mon Oct 25 21:00:00 2004
按找年代排序显示指定作业序列的情况。
# atq
Rank Execution Date Owner Job Queue Job Name
1st Oct 25, 2004 21:00 root 1098648000.a a stdin
显示当前作业的情况
# ls -l /var/spool/cron/atjobs
total 4
-r-Sr--r-- 1 root root 1044 Oct 25 13:48 1098648000.a
你也可以使用at命令移出作业
例如:
#at -r 1098648000.a
#atq
Rank Execution Date Owner Job Queue Job Name
控制at命令的访问
做为root用户你可以控制at命令的访问通过at.deny和at.allow文件。
/etc/cron.d/at.deny文件
默认的Solaris OS有/etc/cron.d/at.deny文件。这个文件标示禁止使用at命令的用户。这个文件的每行都是一个用户名。这个文件初始为:
daemon
bin
nuucp
listen
nobody
noaccess
当一个被禁止访问at命令的用户在尝试使用的时候会接受到以下的消息:
at: you are not authorized to use at. Sorry.
如果/etc/cron.d/at.deny文件为空则所有的用户都可以访问at命令。
/etc/cron.d/at.allow文件
默认情况下/etc/cron.d/at.allow文件并不存在(除了那些在/etc/cron.d/at.deny文件列出的用户)都可以创建at作业。创建文件你列出那些可以使用at作业的用户。
/etc/cron.d/at.allow文件的每行都是由用户名组成的。
在at.allow文件和at.deny文件之间有以下的规则:
如果at.allow文件存在,只有在文件中列出的用户才可以执行at命令
如果at.allow文件不存在,除了at.deny文件中的用户外其他用户都可以执行at命令。
如果两个文件都存在,则只有root可以执行at命令
如果用户在2个文件中,则用户是拒绝使用at命令的。
自动重复执行作业计划
你可以使用cron来灵活规律的重复执行命令。用户能够通过提交cron来灵活的修改crontab文件。
所有的crontab文件都保存在/var/spool/cron/crontabs目录下并且是以创建cron作业的用户的登陆名来存储的。
Cron进程负责这些作业的安排和运行。
Clock进程,cron在系统启动的时候在后台持续运行。
介绍一下crontab文件的格式
文件每行是由6部分组成。每部分由空格或者tab分开。前面5部分是命令计划运行的时间和日期。最后一部分是命令的完整路径。
例如:
10 3 * * 0 /usr/sbin/log/adm
第一部分:分钟的值在0~59之间。
第二部分:小时的值在0~23之间
第三部分:每月的天数的值在1~31之间
第四部分:月数的值在1~12之间
第五部分:周中天数0~6之间
最后一部分是全路径的命令
数值 规则 举例
N 段匹配的值为n 比如前面的小时和分钟为一个为3和10
n,p,q 如果匹配的值为n 通过0,10,20,30,40,50来代表每10分钟
p,q
n-p 匹配的值在n和p之间 可以通过1-4来表示早上1点到4点
* 匹配所有合法的值 如果在月段上为星则代表所有的月
使用crontab命令
crontab命令可以使得用户可以查看,编辑和删除crontab文件。
查看crontab文件
运行crontab –l命令查看root用户的crontab文件。
# crontab -l
#ident "@(#)root 1.21 04/03/23 SMI"
#
# The root crontab should be used to perform accounting data collection.
#
#
10 3 * * * /usr/sbin/logadm
15 3 * * 0 /usr/lib/fs/nfs/nfsfind
30 3 * * * [ -x /usr/lib/gss/gsscred_clean ] &&
/usr/lib/gss/gsscred_clean
#10 3 * * * /usr/lib/krb5/kprop_script ___slave_kdcs
同样的命令也可以查看其他用户的crontab文件。
作为root用户你也能查看其他用户的crontab文件的内容。
#crontab –l username
编辑crontab文件
注意:如果你偶然输入crontab命令而没有带(-l,-e,-r)参数,输入Control-C 退出,不要输入Control-D 命令退出这样会把原来存在的crontab文件变成空文件。
创建和编辑crontab文件执行下面的步骤:
检查EDITOR变量的设置情况。
# EDITOR=vi
# export EDITOR
运行crontab命令来打开crontab文件。
# crontab -e
30 17 * * 5 /usr/bin/banner "Time to go!" > /dev/console
:wq
移出crontab文件
正确的移出crontab文件的命令
# crontab –r username
典型的用户能够移出属于自己的crontab文件。Root用户可以移出任何一个用户的crontab文件。
控制访问crontab文件
你可以控制访问crontab命令在/etc/cron.d目录下的2个文件上--- cron.deny文件和 cron.allow文件。
这些文件只允许指定的用户来执行crontab任务,比如:创建,编辑,显示或者删除自己的crontab文件。
/etc/cron.d/cron.deny文件
默认的Solaris OS有cron.deny文件。这个文件标示禁止使用cron命令的用户。这个文件的每行都是一个用户名。这个文件初始为:
daemon
bin
nuucp
listen
nobody
noaccess
/etc/cron.d/cron.allow文件
默认情况下/etc/cron.d/cron.allow文件并不存在(除了那些在/etc/cron.d/cron.deny文件列出的用户)都可以创建cron作业。创建文件你列出那些可以使用cron作业的用户。
这个文件的每行都是有用户名组成的。
在cron.allow文件和cron.deny文件之间有以下的规则:
如果cron.allow文件存在,只有在文件中列出的用户才可以编辑crontab文件。
如果cron.allow文件不存在,除了cron.deny文件中的用户外其他用户都可以编辑crontab文件。
如果两个文件都存在,则只有root可以执行crontab命令
如果用户在2个文件中,则用户是拒绝使用cron命令的。
使用Solaris Management Console(SMC)来管理计划任务工具
这个是一个图形界面便于操作,就不详细描述了。
阅读(1338) | 评论(0) | 转发(0) |