进程管理
分类:linux基础 热度:

进程管理
====================================================
内容摘要:
进程基础知识
查看进程ps/top
top管理进程
shell管理进程
管理网络进程
proc文件系统
 
一、进程基础知识
====================================================
程序: 文件,一般是二进制,静态 /usr/sbin/httpd,/usr/sbin/sshd
进程: 是程序运行的过程, 动态,有生命周期的,动态产生和消亡的
 
一个程序可能对应多个进程
父进程:程序运行时产生的第一个进程
子进程:由父进程衍生fork()出来的进程
注意:如果父进程终止,子进程会被init接管
====================================================
ps 参数:
aux
-elf
 
[root@yunwei ~]# ps aux |grep 'sshd'
root      2705  0.0  0.0   7224  1020 ?        Ss   08:48   0:00 /usr/sbin/sshd
root      8158  0.0  0.0   4264   676 pts/1    R+   14:05   0:00 grep sshd
 
[root@yunwei ~]# yum -y install httpd
[root@yunwei ~]# service httpd start
[root@yunwei ~]# ps aux |grep 'httpd'
root         8120  0.0  0.1  10092  2908 ?        Ss   14:03   0:00 /usr/sbin/httpd
apache    8121  0.0  0.0  10092  2052 ?        S    14:03   0:00 /usr/sbin/httpd
apache    8122  0.0  0.0  10092  2052 ?        S    14:03   0:00 /usr/sbin/httpd
apache    8123  0.0  0.0  10092  2052 ?        S    14:03   0:00 /usr/sbin/httpd
apache    8124  0.0  0.0  10092  2052 ?        S    14:03   0:00 /usr/sbin/httpd
apache    8125  0.0  0.0  10092  2052 ?        S    14:03   0:00 /usr/sbin/httpd
apache    8126  0.0  0.0  10092  2052 ?        S    14:03   0:00 /usr/sbin/httpd
apache    8128  0.0  0.0  10092  2052 ?        S    14:03   0:00 /usr/sbin/httpd
apache    8129  0.0  0.0  10092  2052 ?        S    14:03   0:00 /usr/sbin/httpd
root      8160  0.0  0.0   4264   676 pts/1    R+   14:05   0:00 grep httpd
 
二、查看进程
了解如进程运行的状态、占用cpu及内存的情况等
==静态ps
[root@yunwei ~]# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY     STAT START   TIME COMMAND
root         1     0.0     0.0       2164   648   ?          Ss     08:47     0:00 init [5]  
 
USER: 运行进程的用户
PID:    进程ID
%CPU: CPU占用率
%MEM:   内存占用率
VSZ:    占用虚拟内存
RSS:      占用实际内存
TTY:    进程运行的终端
STAT: 进程状态 man ps (/STATE)
      R    运行
      S    可中断睡眠 Sleep
      D    不可中断睡眠
      T    停止的进程 
      Z    僵尸进程
      X         kill
      
 Ss   s进程的领导者,父进程
 S<     <优先级较高的进程
 SN     N优先级较低的进程
 R+    +表示是前台的进程组
 Sl    以线程的方式运行
START: 进程的启动时间
TIME: 进程占用CPU的总时间
COMMAND: 进程文件,进程名
 
[root@yunwei ~]# ps auxf |grep httpd
root      9279  0.0  0.0   4264   672 pts/1    S+   14:37   0:00           
     \_ grep httpd
root      8310  0.0  0.1  10092  2912 ?        Ss   14:19   0:00 /usr/sbin/httpd
apache    8311  0.0  0.0  10092  2060 ?        S    14:19   0:00  \_ /usr/sbin/httpd
apache    8312  0.0  0.0  10092  2060 ?        S    14:19   0:00  \_ /usr/sbin/httpd
apache    8313  0.0  0.0  10092  2060 ?        S    14:19   0:00  \_ /usr/sbin/httpd
apache    8314  0.0  0.0  10092  2060 ?        S    14:19   0:00  \_ /usr/sbin/httpd
apache    8315  0.0  0.0  10092  2060 ?        S    14:19   0:00  \_ /usr/sbin/httpd
apache    8316  0.0  0.0  10092  2060 ?        S    14:19   0:00  \_ /usr/sbin/httpd
apache    8318  0.0  0.0  10092  2060 ?        S    14:19   0:00  \_ /usr/sbin/httpd
apache    8319  0.0  0.0  10092  2060 ?        S    14:19   0:00  \_ /usr/sbin/httpd
 
[root@yunwei ~]# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 08:47 ?        00:00:00 init [5]  
 
//自定义显示字段
[root@yunwei ~]# ps axo user,pid,ppid,%mem,command |grep httpd
root      8310     1  0.1 /usr/sbin/httpd
apache    8311  8310  0.0 /usr/sbin/httpd
apache    8312  8310  0.0 /usr/sbin/httpd
apache    8313  8310  0.0 /usr/sbin/httpd
apache    8314  8310  0.0 /usr/sbin/httpd
apache    8315  8310  0.0 /usr/sbin/httpd
apache    8316  8310  0.0 /usr/sbin/httpd
apache    8318  8310  0.0 /usr/sbin/httpd
apache    8319  8310  0.0 /usr/sbin/httpd
root      9236  6798  0.0 grep httpd
 
//查看指定进程的PID
[root@yunwei ~]# ps aux |grep sshd
root     10180  0.0  0.0   7224  1024 ?        Ss   16:00   0:00 /usr/sbin/sshd
[root@yunwei ~]# pgrep sshd
10180
 
//查看进程树
[root@yunwei proc]# pstree
 
 
==动态top(查看、管理进程)
 
[root@yunwei ~]# top
[root@yunwei ~]# top -d 1
[root@yunwei ~]# top -d 1 -p 10126 查看指定进程的动态信息
[root@yunwei ~]# top -d 1 -p `pgrep sshd`     命令替换
[root@yunwei ~]# top -d 1 -p $(pgrep sshd)   命令替换
[root@yunwei ~]# top -d 1 -p $(pgrep vino-server),1
[root@yunwei ~]# top -d 1 -u apache 查看指定用户的进程
[root@yunwei ~]# top -b -n 2 > top.txt 将2次top信息写入到文件
 
第一部分:系统整体统计信息
load average: 0.86, 0.56, 0.78  CPU 1分钟,5分钟,15分钟平均负载
关于CPU负载:服务器10个CPU,每个CPU四核,如果一个CPU同时处理核数(40个)3倍(120)的进程,那么就算高了!
第二部分:进程信息
命令
M 按内存的使用排序
P 按CPU使用排序
N 以PID的大小排序
R 对排序进行反转
f 自定义显示字段
1 显示所有CPU的负载
h|?帮助
< 向前
> 向后
z 彩色
====================================================
进程的优先级:
 
 
====================================================
r 调整进程的优先级(Nice Level) (-20高)  ---0--- (19低)
k 给进程发送信号 1,2(^C),9,15,18,19(^Z)
 
调度算法将进程优先级分为100个(第一行)
real-time实时进程优先级占了99个(1~99) 99最高  实时优先级数字固定
nice level 在全部100个中占1位,这1位分为40个,19最低,-20最高  nice-level优先级不固定
 
在top中PR字段显示的是优先级,负数代表实时进程或者RT也代表实时进程,0~39代表nice level
 
三、shell管理进程
设置或调整进程的优先级(nice值)
[root@yunwei ~]# nice -n -5 sleep 6000 & //程序运行时设置优先级
[root@yunwei ~]# sleep 7000 &
[3] 10089
[root@yunwei ~]# ps axo command,pid,nice |grep sleep
[root@yunwei ~]# renice -20 10089 //对已运行的进程设置新的优先级
10089: old priority 0, new priority -20
 
给进程发送信号
[root@yunwei ~]# kill -l //列出所有支持的信号
编号 信号名
1) SIGHUP 重启
2) SIGINT ^C
9) SIGKILL 强制终止
15) SIGTERM 终止(正常退出,干净),缺省信号
18) SIGCONT 继续
19) SIGSTOP 暂停^Z
 
作业1: 给sshd进程发送信号
[root@yunwei ~]# ps aux |grep sshd
root      9486  0.0  0.0   7224  1056 ?        Ss   15:01   0:00 /usr/sbin/sshd
[root@yunwei ~]# kill -1 9486 //发送重启信号
[root@yunwei ~]# ps aux |grep sshd
root      9947  0.0  0.0   7224  1028 ?        Ss   15:42   0:00 /usr/sbin/sshd
[root@yunwei ~]# kill 9947 //发送停止信号
[root@yunwei ~]# ps aux |grep sshd
root      9953  0.0  0.0   4264   676 pts/1    R+   15:44   0:00 grep sshd
 
作业2:信号测试
[root@yunwei ~]# touch file1 file2
[root@yunwei ~]# tty 
/dev/pts/1
[root@yunwei ~]# vim file1
 
[root@yunwei ~]# tty
/dev/pts/2
[root@yunwei ~]# vim file2
 
[root@yunwei ~]# ps aux |grep vim
root      4362  0.0  0.2  11104  2888 pts/1    S+   23:02   0:00 vim file1
root      4363  0.1  0.2  11068  2948 pts/2    S+   23:02   0:00 vim file2
 
[root@yunwei ~]# kill 4362
[root@yunwei ~]# kill -9 4363
 
[root@yunwei ~]# killall vim //给所有vim进程发送信号
[root@yunwei ~]# killall httpd
 
 
作业3:信号测试
[root@yunwei ~]# ps aux |grep sshd
root      5571  0.0  0.0  64064  1164 ?         Ss   09:35   0:00 /usr/sbin/sshd
 
[root@yunwei ~]# kill -STOP 5571
[root@yunwei ~]# ps aux |grep sshd
root      5571  0.0  0.0  64064  1164 ?         Ts   09:35   0:00 /usr/sbin/sshd
 
[root@yunwei ~]# kill -cont 5571
[root@yunwei ~]# ps aux |grep sshd
root      5571  0.0  0.0  64064  1164 ?         Ss   09:35   0:00 /usr/sbin/sshd
 
====================================================
 
 
四、管理网络进程
netstat
--------------
netstat -an|grep :80|sed 's/[ ][ ][ ]*/ /g'|cut -d " " -f 5 |cut -d ":" -f 4
--------------
 
 
[root@yunwei ~]# netstat -tnlp //查看正在监听的,且使用tcp协议的进程
-t   tcp协议
-u  udp协议
-l   listen
-p  PID/Program name
-n  不反解,不将IP地址解析为主机名,不将端口号解析成协议名(80 ---> http)
-a  包括监听端口和和我进行通信的端口
[root@yunwei ~]# netstat -tnlp |grep :80
[root@yunwei ~]# service httpd start
[root@yunwei ~]# netstat -tnlp |grep :80
tcp        0      0 :::80                       :::*                             LISTEN      10364/httpd 
 
[root@yunwei ~]# netstat -tnlp |grep sshd
tcp        0      0 0.0.0.0:22              0.0.0.0:*                    LISTEN      8737/sshd 
 
[root@yunwei ~]# netstat -tnlp |grep :59
tcp        0      0 127.0.0.1:5900        0.0.0.0:*             LISTEN      5918/qemu-kvm       
tcp        0      0 :::5900                     :::*                           LISTEN      9814/vino-server 
 
[root@yunwei ~]# netstat -an |grep :5900   //查看5900端口连接的状态,an选项是查看所有于查询端口建立链接的ip 端口
'tcp        0      0 0.0.0.0:5900                 0.0.0.0:*                           LISTEN      
tcp       10      0 192.168.2.115:5900       192.168.2.129:46303         ESTABLISHED 
tcp       10      0 192.168.2.115:5900       192.168.2.33:39213           ESTABLISHED 
tcp       10      0 192.168.2.115:5900       192.168.2.116:37023         ESTABLISHED 
tcp        0      0 192.168.2.115:5900        192.168.2.126:35725         ESTABLISHED 
tcp       10      0 192.168.2.115:5900       192.168.2.124:33955         ESTABLISHED 
 
[root@yunwei ~]# netstat -an |grep :80
tcp        0      0 :::80                       :::*                         LISTEN      
tcp        0      0 ::ffff:192.168.5.230:80     ::ffff:192.168.5.14:59872   TIME_WAIT   
tcp        0      0 ::ffff:192.168.5.230:80     ::ffff:192.168.5.14:59873   TIME_WAIT   
tcp        0      0 ::ffff:192.168.5.230:80     ::ffff:192.168.5.14:59874   TIME_WAIT   
tcp        0      0 ::ffff:192.168.5.230:80     ::ffff:192.168.5.14:59875   TIME_WAIT   
tcp        0      0 ::ffff:192.168.5.230:80     ::ffff:192.168.5.1:43007     TIME_WAIT   
tcp        0      0 ::ffff:192.168.5.230:80     ::ffff:192.168.5.14:59848   TIME_WAIT   
tcp        0      0 ::ffff:192.168.5.230:80     ::ffff:192.168.5.14:59849   TIME_WAIT   
 
 
五、proc文件系统
虚拟文件系统: 内核、进程运行的状态信息
[root@yunwei ~]# du -sh /proc 
0       /proc
 
/proc/cpuinfo
[root@yunwei ~]# grep 'processor' /proc/cpuinfo //逻辑cpu的个数
processor       : 0
processor       : 1
[root@yunwei ~]# grep 'physical id' /proc/cpuinfo //物理cpu的个数
physical id     : 0
physical id     : 0
==flags
lm(64位)
vmx 支持虚拟化 Intel
svm 支持虚拟化 AMD
[root@yunwei ~]# egrep --color 'lm|vmx|svm' /proc/cpuinfo 
flags           : fpu vme de clflush dts acpi lm constant_tsc pni monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr lahf_lm
flags           : fpu vme de clflush dts acpi lm constant_tsc pni monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr lahf_lm
 
/proc/meminfo
[root@yunwei ~]# less /proc/meminfo
[root@yunwei ~]# free -m
              total       used       free     shared    buffers     cached
Mem:          2017       1955         61          0        113       1426
-/+ buffers/cache:     416          1600
Swap:         8001       0              8001
 
/proc/cmdline //内核启动参数
[root@yunwei ~]# cat /proc/cmdline
ro root=/dev/mapper/GLSvg-GLSroot rd_NO_LUKS LANG=en_US.UTF-8 rd_LVM_LV=GLSvg/GLSroot rd_LVM_LV=GLSvg/GLSswap rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=129M@0M  KEYBOARDTYPE=pc KEYTABLE=us biosdevname=0 rd_NO_DM rhgb quiet
 
uptime
[root@yunwei ~]# uptime 
 17:20:58 up  8:33,  3 users,  load average: 0.43, 0.36, 0.36
 
 
注:如果卸载proc文件系统后。。。
[root@yunwei ~]# mount
[root@yunwei ~]# umount /proc/ -l
 
[root@yunwei ~]# free -m
Error: /proc must be mounted
  To mount /proc at boot you need an /etc/fstab line like:
      /proc   /proc   proc    defaults
  In the meantime, run "mount /proc /proc -t proc"
  
[root@yunwei ~]# uptime 
Error: /proc must be mounted
  To mount /proc at boot you need an /etc/fstab line like:
      /proc   /proc   proc    defaults
  In the meantime, run "mount /proc /proc -t proc"
  
[root@yunwei ~]# lscpu 
lscpu: error: cannot open /proc/cpuinfo: 没有那个文件或目录
 
[root@yunwei ~]# top
top: /proc is not mounted, required for output data
 
重启挂载proc文件系统
[root@yunwei ~]# mount -t proc proc /proc
-t proc 指定文件系统的类型
proc 文件系统,虚拟文件系统
/proc 挂载点
 
六、作业控制
进程前台、后台
把前台程序调到后台:
&  后台运行
^z    后台挂起
fg        前台输出前台运行
bg       后台运行前台输出
 
kill PID
kill %后台作业号
 
[root@yunwei ~]# sleep 3000 & //运行程序(时),让其在后台执行
[root@yunwei ~]# sleep 4000 //^z,将前台的程序挂起(暂停)到后台
[2]+  Stopped                sleep 4000
 
[root@yunwei ~]# ps aux |grep sleep
root      8895  0.0  0.0 100900   556 pts/0    S    12:13   0:00 sleep 3000
root      8896  0.0  0.0 100900   556 pts/0    T    12:13   0:00 sleep 4000
[root@yunwei ~]# jobs //查看后台作业
[1]-  Running                 sleep 3000 &
[2]+ Stopped               sleep 4000
 
[root@yunwei ~]# bg %2 //让作业2在后台运行
[root@yunwei ~]# fg %1    //将作业1调回到前台
 
vim中 ctrl+z 可以将当前正在查看的文件放到后台,然后再用fg命令调回来
 
[root@yunwei ~]# kill %1 //kill 1,杀死PID为1的进程
 
注意事项:
[root@yunwei ~]# gedit &
[root@yunwei ~]# nohup gedit & //该进程在运行时,不依赖于任何终端
上一篇:SHELL变量 下一篇:管道重定向
猜你喜欢
各种观点
热门排行
精彩图文