Chinaunix首页 | 论坛 | 博客
  • 博客访问: 127393
  • 博文数量: 38
  • 博客积分: 2510
  • 博客等级: 少校
  • 技术积分: 385
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-14 17:13
文章分类

全部博文(38)

文章存档

2009年(3)

2008年(35)

我的朋友

分类:

2008-12-01 15:18:02

控制系统进程
目标要求:
查看系统进程
杀掉僵死进程
计划在一个时刻自动执行命令
计划自动重新执行命令

查看系统进程
进程是系统中运行的程序。所有的进程都被分配给一个唯一的进程标示符(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) |
0

上一篇:solaris笔记十二

下一篇:solaris笔记十四

给主人留下些什么吧!~~