关于 进程的解释:

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 –U root

显示root的所有进程,也可以附加参数-v取反 即root之外的所有进程

#pgrep –G student

-L 显示所有信息

#ps aux |grep X 选出Xwindow 服务相关进程

pgrep的匹配模式支持正则表达式

如:#ps axo pid,command |grep ssh

显示ssh相关进程的pid 和发起命令

 

 

系统信号:

kill命令:可以+PID kill掉指定进程 有多种kill方式用kill –15  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 –l 查看

 

killall +进程名 可以kill掉基于该命令的所有进程

如果要kill一部分 就加上-i参数 交互式kill

killall –u +用户名 kill掉某个用户的所有进程

killall匹配进程时 同样支持正则表达式

 

 

实时查看系统进程信息:

#top命令

#ps –o comm,nice 更改进程优先级

nice值 –20 -- +19 优先级越小越高

如果进程未启动 #nice –1 –p PID 则可以指定nice值

如果进程已经启动则#renice -1|+1 –p PID 可以+n或者-n 不超过nice范围即可

#nice –n 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 –b

-n 2 指定刷新2次

-d 1 指定刷新间隔为1s

 

 

系统作业:

#jobs

查看当前和后台的作业

#fg %n 将作业号n的进程调到前台运行

#bg %n 让作业号n的进程再后台继续运行

#jobs –l 查看进程号

-r running的作业

-s stopped的作业

#kill %n kill掉进程号为n的作业

 

 

指定计划任务:

at

#at now + 5min 再过5分钟运行

#at 16:30 (即下一个16:30)

之后可以写 命令

一行一条

写完之后ctrl +d 提交

也可以把命令放到一个文件中 at能够读取这个文件中的命令 逐条执行

#at –f /root/a.txt 04:00

做完的作业 用mail查看 默认作业结果都会发到发起作业的用户的邮箱

#at –d 3 删除第三个作业

#at =batch 当系统负载较低时自动运行作业

 

crontab

需要的软件包和服务

vixie-cron.rpm

service crond start

#crontab –l 列出作业列表

-r清空作业列表

#crontab –u redhat –e 给别人写任务计划

-l –u redhat 查看别人的任务计划

编辑crontab任务列表

#crontab –e 即可

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 –l 查看

可以将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