什么是进程?
进程是被载入内存的一个指令集合
进程ID(Process ID,PID)号码被用来标记各个进程
UID、GID相关权限和 SElinux决定对文件系统的存取和访问
通常从执行进程的用户处继承
查看进程
使用ps来查看进程信息
仅执行ps,显示当前终端中的进程
a 选项包括与现行终端的所有进程
x 选项包括不连接终端的进程
u 选项显示进程所有者的信息
f 选项显示进程的父进程
o 属性,…选项显示定制的信息:
ps axo
pid,comm,%cpu,%mem,state,tty,ppid,pri,ni,user,cmd
ps aux ; ps -l
搜索进程
最灵活:ps 选项 | 其它命令
ps axo comm,tty | grep ttyS0
按预定义的模式:pgrep
$ pgrep -U uid sshd
$ pgrep -G gid sshd
按确切的程序名称:pidof :找出一个程序的pid
$ pidof bash
Ps选项
默认显示当前终端中的进程
-a 选项包括所有终端中的进程
-x 选项包括不连接终端的进程
-u 选项显示进程所有者的信息
-f 选项显示进程的父进程
-e选项是现实所有进程
-p pid 显示些pid的进程信息
-o 属性,…选项显示定制的信息:
pid、comm、%cpu、%mem、state、tty、euser、ruser
ps -e 两个都是查看所有进程
ps -ef
ps axo comm,tty|grep tty
pgrep -U root ssh
pgrep –G root |more
查找cups进程
产看进程id号
通过一下选项显示进程的详细信息
列出进程调用bash的进程号
或者通过pidof 来查看bash进程
信号
最基本的进程间通讯方式
-直接发送给进程,不需要用户界面
-程序给每个信号关联动作
-发送信号可以使用名称或号码:
信号15 ,TERM(默认):正常终止
信号9,KILL:强制立即终止
信息1,HUP:重读配置文件
man 7 signal 显示了完整列表信息,比较详细
通过kill -l 来查看信号类型,但是信息没有那么详细
给进程发送信号
按PID:kill [-信号] pid …
按名称:killall [-信号] bash
按模式:pkill [-信号] 模式
例如查看rsyslogd进程号,然后通过kill重新启动
通过tail命令查看是否重新启动
例子1:把SIGHUP命令发送给rsyslogd
#killall -1 rsyslogd
例子2:强制终止httpd进程
#killall -9 httpd
调度优先性
调度优先级priority决定对CPU的使用顺序
优先级受进程的nice值(nice value)影响
这个nice值的范围是-20到19,默认为0
-pri值越小,说明对CPU的使用越优先
使用ps –o comm,nice ;ps axo pid,nice,user
ps -l 命令可以查看
改变调度优先性
nice值可以被改变…
-在启动进程时:
nice -n +5 命令名字
nice -n -10 命令名字
-在启动后:
$ renice +5 PID ; renice -5 PID
$ renice -n +5 PID ; renice -n -5 PID
只有根用户才能降低nice值(提高优先性) nice -n -10 vim nice -n +10 vim
普通用户的nice只能是0-19,而且每只能比前一次大
查看comm,和nice
启动进程时给定nice值:nice –n 5 命令
修改bash的nice值
修改bash的nice值为15 renice –n 15 pid
查看bash的nice值是否发生变化
修改vim的nice值
通过例子可以看到root可以使nice值变小,也可将变小的值提高
查看普通用户能否修改nice值
交互式进程管理工具
动态查看进程信息的命令行:top
(信息)查看rhce-||调查和管理进程.doc文档
关于top命令的用法
M:以内存使用为序排列
P:以cpu的使用率排列
h:帮助
q(小写):退出
图形化界面:gnome-system-monitor
能力
-显示实时进程信息
-允许排序、中止运行、和重设nice值
Gnome-system-monitor
作业控制
前台与后台区别
在后台运行进程
-在命令行后添加一个和号(&): firefox&
将进程放到后台中暂时停止:
-使用Ctrl -z 或发送信号 19 (STOP)
管理后台作业或暂停的作业
-列举作业号码和名称:jobs
-在后台恢复运行:bg [%作业号码]
-在前台恢复运行:fg [%作业号码]
-发送信号:kill -[信号] [%作业号码]
计划任务与例行任务
一次性作业使用at,重复性作业使用crontab
没有被重导向的输出会被邮寄给用户
根用户能够修改其它用户的作业
* The superuser may use these commands in any case. For other users, permission to use at is determined by the
* files /etc/at.allow and /etc/at.deny.
* If the file /etc/at.allow exists, only usernames mentioned in it are allowed to use at.
* If /etc/at.allow does not exist, /etc/at.deny is checked, every username not mentioned in it is then allowed to
* use at.
* If neither exists, only the superuser is allowed use of at.
* An empty /etc/at.deny means that every user is allowed use these commands, this is the default configuration.
与at有关的配置文件,at.allow,at.deny
at.allow优先级比at.deny的高:
1.先看at.allow,有在里面的用户可以使用at
at.allow不存在时,则检查at.deny,里面的用户不能使用
2.两个文件不存在则只有root才可以使用
一般系统默认只有一个空的at.deny,意味着系统里所有的用户都可以使用at,
两个文件里写用户里一行一个用户
步骤
1、先service atd start|restart
2、at 时间
时间:at now + 20 minutes
at 20:39 2013-4-13
回车后,可以输入要执行的命令
输入完成后ctrl+d
atq = at -l 查看
atrm 作业号= at -d 作业号
Crontab文件格式
项目包含五个用空格分隔的字段,然后是要执行的命令
每行一个项目,行的长度没有限制
字段是:分钟、小时、日期、月份、星期几
注释行以#开头
详细参见man 5 crontab的说明书页
与crontab有关的配置文件:cron.allow、cron.deny
1.先看cron.allow,在里面的用户则可以使用crontab
2.没有cron.allow的,检查cron.deny,在里面的不可以使用crontab
3.两个文件都不存在时只有root可以使用
一般系统默认只有一个空的cron.deny,意味着所有人都可以使用
以上两个文件一行一个用户账号
步骤:
1 /etc/init.d/crond start|restart或者service crond start|restart
2 crontab -e
3 出现的vi编辑器输入要执行的命令,一行一个任务,输入完了:wq保存退出
查看:crontab -l
删除此用户所有任务:crontab -r
只想修改,crontab -e
/etc/crontab
系统自动周期性执行
vim /etc/crontab
SHELL=/bin/sh
MAILTO=paul
# run five minutes after midnight, every day
5 4 3 6 * $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
# run at 2:15pm on the first of every month -- output mailed to paul
15 */2 1 * * $HOME/bin/monthly
# run at 10 pm on weekdays, annoy Joe
0 22 * * 1-5 mail -s "It’s 10pm" joe%Joe,%%Where are your kids?%
23 0-23/2 * * * echo "run 23 minutes after midn, 2am, 4am ..., everyday" 5 4 * * sun echo "run at 5 after 4 every sunday"
聚集命令
聚集命令概念:把命令写在一起
有两种聚集命令的方法:
-复合式:date; who | wc –l
命令会一个接一个地运行
子shell:(date;who | wc –l)>> /tmp/trace
-所有的输出都被发送给单个STDOUT和STDER
例子
退出状态
进程使用退出状态来报告成功或失败
-0代表成功,1-255代表失败
-$? 变量保存上一条的命令退出状态
-exit [num]:终止,并把状态设置为num
-Shell脚本可以自定义错误信息
例如:
$ ping -c 1 -W 1 station999 &> /dev/null
$ echo $?
正常执行echo $?返回0 ,错误的话返回大于零的数字
条件性的执行操作符
根据退出状态而定,命令可以有条件地运行
&& 代表条件性的AND THEN
&&只有第一条命令只有执行成功后,才能那个执行第二条命令
|| 代表条件性的OR ELSE
||只有第一条命令执行失败后,才能执行第二条命令
例如:
$ grep -q no_such_user /etc/passwd || echo 'No such user'
No such user
$ ping -c1 -W2 station1 &> /dev/null \
> && echo "station1 is up" \
> || (echo 'station1 is unreachable'; exit 1)
station1 is up
test 命令
判断条件是否成立,以便用在条件性执行中
条件成立,则为真,则返回0
条件不成立,则为假,则返回非0
长格式的例子:
$ test "$A" = = "$B" && echo "Strings are equal"
$ test "$A" -eq "$B" && echo "Integers are equal"
简写格式的例子:
$ [ "$A" == "$B" ] && echo "Strings are equal“
$ [ "$A" -eq "$B" ] && echo "Integers are equal"
查看日志的重要性
日志的作用
解决系统故障
解决网络服务问题
记录登陆信息
常见的日志文件
/var/log/secure 记录用户登录系统,只有有要求输入密码的就纪录
/var/log/wtmp 记录登陆者的信息数据,由于这个文件已编码,只能使用last命令来查看
/var/log/messages 这个文件相当重要,只是系统的错误信息都会记录在这个文件中
/var/log/boot.log 记录开机或一些服务启动和关闭信息
/var/log/maillog 和/var/log/mail/*记录邮件来往的用户记录
/var/log/cron 记录crontab例行性服务的内容
/var/log/httpd ,/var/log/news /varlog/samba 等记录网络服务的文件