关于 进程的解释:
processes 可以解释为 一段内存空间中正在运行的一个或者多个线程
进程可以看做是用户的代理 代理用户与核心及系统组件交互 完成用户交与的任务
linux里一切皆文件 当然 进程也不例外
当前系统正在运行的进程相关文件:/etc/proc/*
系统根据进程号PID识别每个进程 PID (1~32767)
用户每发起一个进程 系统就分配一个PID 用来标识此进程
PID1为init进程 进程号永远为1 它是启动linux系统时启动的第一个进程 然后 任何进程都作为它的子进程从它启动 进而就可以启动更多子子进程。。
信号:进程之间彼此通信的信息
查看系统进程:
重要命令:
#ps aux
a 包括所有终端的所有进程
u 显示每个进程的用户信息
x 包括不属于某个终端的进程
f 列出进程的父子关系
o 按用户指定格式显示信息
例如 #ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 2072 616 ? Ss 02:18 0:01 init [5]
root 2 0.0 0.0 0 0 ? S< 02:18 0:00 [migration/0]
root 3 0.0 0.0 0 0 ? SN 02:18 0:00 [ksoftirqd/0]
root 4 0.0 0.0 0 0 ? S< 02:18 0:00 [watchdog/0]
root 5 0.0 0.0 0 0 ? S< 02:18 0:00 [migration/1]
root 6 0.0 0.0 0 0 ? SN 02:18 0:00 [ksoftirqd/1]
root 7 0.0 0.0 0 0 ? S< 02:18 0:00 [watchdog/1]
root 8 0.0 0.0 0 0 ? S< 02:18 0:00 [events/0]
root 9 0.0 0.0 0 0 ? S< 02:18 0:00 [events/1]
root 10 0.0 0.0 0 0 ? S< 02:18 0:00 [khelper]
root 11 0.0 0.0 0 0 ? S< 02:18 0:00 [kthread]
root 15 0.0 0.0 0 0 ? S< 02:18 0:00 [kblockd/0]
root 16 0.0 0.0 0 0 ? S< 02:18 0:00 [kblockd/1]
root 17 0.0 0.0 0 0 ? S< 02:18 0:00 [kacpid]
root 78 0.0 0.0 0 0 ? S< 02:18 0:00 [cqueue/0]
root 79 0.0 0.0 0 0 ? S< 02:18 0:00 [cqueue/1]
root 82 0.0 0.0 0 0 ? S< 02:18 0:00 [khubd]
root 84 0.0 0.0 0 0 ? S< 02:18 0:00 [kseriod]
解释:
USER:进程所属用户
PID:进程号
%cpu:cpu占用率
%mem:ram占用率k
vsz:vram占用率k
rss:占用非虚拟内存大小k
tty:相关联的终端 ?表示系统守护进程 与终端没有附属关系
stat:进程状态 S可中断的睡眠 N低优先级 <高优先级
start: 进程发起时间
time:从发起进程到现在总共使用过的cpu运行时间
command:属于哪个命令发起的进程
例如:#ps axo pid,%cpu,comm
PID %CPU COMMAND
1 0.0 init
2 0.0 migration/0
3 0.0 ksoftirqd/0
4 0.0 watchdog/0
5 0.0 migration/1
6 0.0 ksoftirqd/1
7 0.0 watchdog/1
8 0.0 events/0
9 0.0 events/1
10 0.0 khelper
11 0.0 kthread
15 0.0 kblockd/0
16 0.0 kblockd/1
17 0.0 kacpid
78 0.0 cqueue/0
79 0.0 cqueue/1
82 0.0 khubd
84 0.0 kseriod
151 0.0 pdflush
……………………
……………………
找到某个进程的方法
#ps aux |grep PID 或者进程名
也可以
#ps axo property1,property2,…|grep ttys0
查看一个进程的pid
#pidof bash 可以看到进程名为bash的进程号
匹配模式:
#pgrep �CU root
显示root的所有进程,也可以附加参数-v取反 即root之外的所有进程
#pgrep �CG student
-L 显示所有信息
#ps aux |grep X 选出Xwindow 服务相关进程
pgrep的匹配模式支持正则表达式
如:#ps axo pid,command |grep ssh
显示ssh相关进程的pid 和发起命令
系统信号:
kill命令:可以+PID kill掉指定进程 有多种kill方式用kill �C15 PID
signal 15 常规终止进程 允许该进程做完收尾工作 自动结束运行 该选项为默认值
signal 9 暴力终止 或者说强行终止 直接杀死进程 不容许该进程再多做一点
signal 1 reload 配置文件
signal 2 打断程序 例如ctrl+c
signal 13 broken pipe 破坏进程之间通信的管道以终止进程
30,10,16
30,12,17都可以自定义其操作和含义
其余可以man 7 signal
可以kill �Cl 查看
killall +进程名 可以kill掉基于该命令的所有进程
如果要kill一部分 就加上-i参数 交互式kill
killall �Cu +用户名 kill掉某个用户的所有进程
killall匹配进程时 同样支持正则表达式
实时查看系统进程信息:
#top命令
#ps �Co comm,nice 更改进程优先级
nice值 �C20 -- +19 优先级越小越高
如果进程未启动 #nice �C1 �Cp PID 则可以指定nice值
如果进程已经启动则#renice -1|+1 �Cp PID 可以+n或者-n 不超过nice范围即可
#nice �Cn 5 command 启动时指定优先级
#top
top - 04:28:41 up 2:09, 5 users, load average: 0.00, 0.00, 0.00
Tasks: 129 total, 1 running, 128 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.2%us, 2.2%sy, 0.5%ni, 96.4%id, 0.6%wa, 0.0%hi, 0.1%si, 0.0%st
Mem: 385256k total, 348888k used, 36368k free, 33316k buffers
Swap: 1052248k total, 0k used, 1052248k free, 191092k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 15 0 2072 616 528 S 0.0 0.2 0:01.21 init
2 root RT -5 0 0 0 S 0.0 0.0 0:00.83 migration/0
3 root 34 19 0 0 0 S 0.0 0.0 0:00.49 ksoftirqd/0
4 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/0
5 root RT -5 0 0 0 S 0.0 0.0 0:00.30 migration/1
6 root 34 19 0 0 0 S 0.0 0.0 0:00.17 ksoftirqd/1
7 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/1
8 root 10 -5 0 0 0 S 0.0 0.0 0:00.18 events/0
9 root 10 -5 0 0 0 S 0.0 0.0 0:00.01 events/1
10 root 10 -5 0 0 0 S 0.0 0.0 0:00.02 khelper
11 root 10 -5 0 0 0 S 0.0 0.0 0:00.01 kthread
15 root 10 -5 0 0 0 S 0.0 0.0 0:00.04 kblockd/0
16 root 16 -5 0 0 0 S 0.0 0.0 0:00.03 kblockd/1
17 root 15 -5 0 0 0 S 0.0 0.0 0:00.00 kacpid
78 root 13 -5 0 0 0 S 0.0 0.0 0:00.00 cqueue/0
79 root 14 -5 0 0 0 S 0.0 0.0 0:00.00 cqueue/1
82 root 10 -5 0 0 0 S 0.0 0.0 0:00.00 khubd
84 root 10 -5 0 0 0 S 0.0 0.0 0:00.02 kseriod
批处理模式 刷新一次翻屏一次
#top �Cb
-n 2 指定刷新2次
-d 1 指定刷新间隔为1s
系统作业:
#jobs
查看当前和后台的作业
#fg %n 将作业号n的进程调到前台运行
#bg %n 让作业号n的进程再后台继续运行
#jobs �Cl 查看进程号
-r running的作业
-s stopped的作业
#kill %n kill掉进程号为n的作业
指定计划任务:
at
#at now + 5min 再过5分钟运行
#at 16:30 (即下一个16:30)
之后可以写 命令
一行一条
写完之后ctrl +d 提交
也可以把命令放到一个文件中 at能够读取这个文件中的命令 逐条执行
#at �Cf /root/a.txt 04:00
做完的作业 用mail查看 默认作业结果都会发到发起作业的用户的邮箱
#at �Cd 3 删除第三个作业
#at =batch 当系统负载较低时自动运行作业
crontab
需要的软件包和服务
vixie-cron.rpm
service crond start
#crontab �Cl 列出作业列表
-r清空作业列表
#crontab �Cu redhat �Ce 给别人写任务计划
-l �Cu redhat 查看别人的任务计划
编辑crontab任务列表
#crontab �Ce 即可
min hour day month week-day command
0-59 0-23 1-31 1-12 0-7 echo“xxxxxxx”
逐行写计划
如果那个参数不用或者循环用 则置为*
脚本中捕获系统信号:
trap
如#trap “echo ‘xxxxxxxxx’&&exit 3”INT
即 捕获到INT信号时 就echo xxxxxx这句话 并且退出shell 返回状态码 3
具体信号种类 可以kill �Cl 查看
可以将trap应用到 要捕获用户键盘输入值 而执行某种动作的某个script
实例(1):
监测指定网卡的ip以及子网掩码是否正常 如果不正常则重启service 每隔10s查看一次 如果捕获用户输入ctrl+z或者ctrl+d则停止运行并返回状态码2 echo 出you stopped ip test
#!/bin/bash
ETH='eth0'
trap "echo 'You stopped ip test...'&&exit 2" SIGSTOP SIGINT
testip() {
while true;do
[ `ifconfig $ETH|grep "inet addr"|cut -d' ' -f12,16|grep -E -o "([0-9]{1,3}\.){
3}[0-9]{1,3}"|wc -l` -ne 2 ]&&service network restart
trap "echo 'You stopped ip test...'&&exit 2" SIGSTOP SIGINT
sleep 10
done
}
while getopts "i:" SWITCH;do
case $SWITCH in
i) ETH=$OPTARG;testip;;
*) echo "Usage: -i value";;
esac
done