• 幕客老师召集小伙伴
  • 运维高手36项修炼
  • python自动化运维项目实战
  • nginx从入门到实战
  • 阿里云与Centos7实战

进程管理

进程管理
====================================================

内容摘要:
进程基础知识
查看进程ps/top
top管理进程
shell管理进程
管理网络进程
proc文件系统
作业控制


 

一、进程基础知识


====================================================
程序: 文件,一般是二进制,静态 /usr/sbin/httpd,/usr/sbin/sshd
进程: 是程序运行的过程, 动态,有生命周期的,动态产生和消亡的

一个程序可能对应多个进程
父进程:程序运行时产生的第一个进程
子进程:由父进程衍生fork()出来的进程
注意:如果父进程终止,子进程也会随之被终止
====================================================

[root@Jeson shell_script]# ps -aux|wc -l  统计当前系统所以进程命令有多少个

[root@jeson ~]# ps aux |grep 'sshd'
root      27050.00.072241020?Ss08:480:00/usr/sbin/sshd
root      81580.00.04264676 pts/1    R+14:050:00 grep sshd

[root@jeson ~]# yum -y install httpd
[root@jeson ~]# service httpd start

[root@jeson ~]# ps aux |grep 'httpd'
root      81200.00.1100922908?Ss14:030:00/usr/sbin/httpd
apache    81210.00.0100922052?        S    14:030:00/usr/sbin/httpd
apache    81220.00.0100922052?        S    14:030:00/usr/sbin/httpd
apache    81230.00.0100922052?        S    14:030:00/usr/sbin/httpd
apache    81240.00.0100922052?        S    14:030:00/usr/sbin/httpd
apache    81250.00.0100922052?        S    14:030:00/usr/sbin/httpd
apache    81260.00.0100922052?        S    14:030:00/usr/sbin/httpd
apache    81280.00.0100922052?        S    14:030:00/usr/sbin/httpd
apache    81290.00.0100922052?        S    14:030:00/usr/sbin/httpd
root      81600.00.04264676 pts/1    R+14:050:00 grep httpd

二、查看进程


了解如进程运行的状态、占用cpu及内存的情况等
==静态ps

[root@jeson ~]# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY     STAT START   TIME COMMAND
root         10.00.02164648?Ss08:470:00 init [5]

USER: 运行进程的用户
PID: 进程ID
%CPU: CPU占用率
%MEM: 内存占用率
VSZ: 占用虚拟内存
RSS:   占用实际内存
TTY: 进程运行的终端,tty(终端设备的统称),pty\pts(虚拟终端)
STAT: 进程状态 man ps (/STATE) 
      R 运行
      S 可中断睡眠 Sleep
      D 不可中断睡眠
      T 停止的进程 
      Z 僵尸进程
      X
      
 Ss   s进程的领导者,父进程
 S< <优先级较高的进程
 SN  N优先级较低的进程
 R+ +表示是前台的进程组
 Sl 以线程的方式运行 
START: 进程的启动时间
TIME: 进程占用CPU的总时间
COMMAND: 进程文件,进程名

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@jeson ~]# 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@jeson ~]# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 08:47 ?        00:00:00 init [5]

//自定义显示字段

1
2
3
4
5
6
7
8
9
10
11
12
[root@Jeson ~]# ps -axo user,command,ppid,pid,%cpu|grep httpd
[root@jeson ~]# 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@jeson ~]# ps aux |grep sshd
root     101800.00.072241024?Ss16:000:00/usr/sbin/sshd
[root@jeson ~]# pgrep sshd
10180

 

//查看僵尸进程状态

[root@jeson ~]# ps -A -ostat,ppid,pid,cmd,lstart | grep -e '^[Zz]'

Z     79722 119812 [sh] <defunct>              Tue Nov 29 03:00:01 2016

 

 

//查看系统进程准确的启动时间

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//例1
ps -p $pid -o lstart
[root@Jeson ~]# ps -p `pgrep mongod` -o lstart
                 STARTED
Tue Dec 30 14:52:45 2014
 
//例2
ps -p `pgrep -f -d, nginx` -o lstart
                 STARTED
Thu Jan 29 22:39:22 2015
Sat Feb 28 00:00:02 2015
Sat Feb 28 00:00:02 2015
Sat Feb 28 00:00:02 2015
Sat Feb 28 00:00:02 2015
Sat Feb 28 00:00:02 2015
Sat Feb 28 00:00:02 2015
Sat Feb 28 00:00:02 2015
Sat Feb 28 00:00:02 2015
Sat Feb 28 00:00:02 2015

[root@Jeson shell_script]# pgrep -P 2595  查看父进程所有子进程的pid

//查看进程树
[root@jeson proc]# pstree

==动态top(查看、管理进程)

[root@jeson ~]# top
[root@jeson ~]# top -d 1

[root@jeson ~]# top -d 1 -p 10126	查看指定进程的动态信息

[root@jeson ~]# top -d 1 -p `pgrep metacity`    	命令替换

[root@jeson ~]# top -d 1 -p $(pgrep metacity)   命令替换

[root@jeson ~]#top -d 1 -p $(pgrep metacity),1

[root@jeson ~]# top -d 1 -u apache	查看指定用户的进程

[root@jeson ~]# top -b -n 2 > top.txt 将2次top信息写入到文件,结果用vim查看有乱码的情况。

第一部分:系统整体统计信息
load average: 0.86, 0.56, 0.78 CPU 1分钟,5分钟,15分钟平均负载

第二部分:进程信息
命令
M 按内存的使用排序
P 按CPU使用排序
N 以PID的大小排序
R 对排序进行反转
f 自定义显示字段
1 显示所有CPU的负载

h|?帮助
< 向前
> 向后
z 彩色

====================================================
进程的优先级:
p

====================================================
r 调整进程的优先级(Nice Level) (-20高)  ---0--- (19低)
k 给进程发送信号 1,2(^C),9,15,18,19(^Z)

三、shell管理进程


设置或调整进程的优先级(nice值)

[root@jeson ~]# nice -n -5 sleep 6000 &	//程序运行时设置优先级

[root@jeson ~]# sleep 7000 &[3]10089

[root@jeson ~]# ps axo command,pid,nice |grep sleep

[root@jeson ~]# renice -20 10089	//对已运行的进程设置新的优先级10089: old priority 0, new priority -20

给进程发送信号
[root@jeson ~]# kill -l //列出所有支持的信号
编号 信号名
1) SIGHUP 重启
2) SIGINT ^C
9) SIGKILL 强制终止
15) SIGTERM 终止(正常退出,干净),缺省信号
18) SIGCONT 继续
19) SIGSTOP 暂停^Z

作业1: 给sshd进程发送信号

[root@jeson ~]# ps aux |grep sshd
root      94860.00.072241056?Ss15:010:00/usr/sbin/sshd
[root@jeson ~]# kill -1 9486	//发送重启信号
[root@jeson ~]# ps aux |grep sshd
root      99470.00.072241028?Ss15:420:00/usr/sbin/sshd
[root@jeson ~]# kill 9947	//发送停止信号
[root@jeson ~]# ps aux |grep sshd
root      99530.00.04264676 pts/1    R+15:440:00 grep sshd
[root@Jeson ~]# ps -aux|grep ssh

Warning: bad syntax, perhaps a bogus '-'?See/usr/share/doc/procps-3.2.8/FAQ
root      3903  0.3  0.2  97860  3836?        Ss   10:00   0:01 sshd: root@pts/1 
root      4048  0.0  0.0  64116  1188?        Ss   10:07   0:00/usr/sbin/sshd
root      4054  0.0  0.1  96528  3644?        Ss   10:08   0:00 sshd: root [priv]

如果kill -9 or -15 sshd守护进程,为什么会没有中断掉sshd: root@pts/1这个已经连接的远程进程。原因:sshd: root@pts/1 PPID1 
ssh只是一个登陆认证的服务,真正远程登陆由init接管。

作业2:信号测试
[root@y ~]# touch file1 file2
[root@jeson ~]# tty 
/dev/pts/1

开启新终端
[root@jeson ~]# vim file1

[root@jeson ~]# tty
/dev/pts/2
[root@jeson ~]# vim file2

[root@jeson ~]# 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@jeson ~]# kill 4362
[root@jeson ~]# kill -9 4363

[root@jeson ~]# killall vim //给所有vim进程发送信号
[root@jeson ~]# killall httpd

作业3:信号测试
[root@jeson ~]# ps aux |grep sshd
root      5571  0.0  0.0  64064  1164 ?         Ss   09:35   0:00 /usr/sbin/sshd

[root@jeson ~]# kill -STOP 5571   //停止进程
[root@jeson ~]# ps aux |grep sshd
root      5571  0.0  0.0  64064  1164 ?         Ts   09:35   0:00 /usr/sbin/sshd

[root@jeson ~]# kill -cont 5571  //恢复进程
[root@jeson ~]# ps aux |grep sshd
root      5571  0.0  0.0  64064  1164 ?         Ss   09:35   0:00 /usr/sbin/sshd

====================================================

 

四、管理网络进程


netstat

[root@jeson ~]# netstat -tnlp	//查看正在监听的,且使用tcp协议的进程-t   tcp协议-u  udp协议-l   listen
-p  PID/Program name
-n  不反解,不将IP地址解析为主机名,不将端口号解析成协议名(80---> http[root@jeson ~]# netstat -tnlp |grep :80[root@jeson ~]# service httpd start

[root@jeson ~]# netstat -tnlp |grep :80
tcp        00:::80:::*                             LISTEN      10364/httpd 

[root@jeson ~]# netstat -tnlp |grep sshd
tcp        000.0.0.0:220.0.0.0:*                    LISTEN      8737/sshd 

[root@jeson ~]# netstat -tnlp |grep :59
tcp        00 www.iaskjob.com:59000.0.0.0:*             LISTEN      5918/qemu-kvm       
tcp        00:::5900:::*                           LISTEN      9814/vino-server 

[root@jeson ~]# netstat -an |grep  :5900	 //查看5900端口连接的状态
tcp        000.0.0.0:59000.0.0.0:*                          	LISTEN      
tcp       100192.168.2.115:5900192.168.2.129:46303         ESTABLISHED 
tcp       100192.168.2.115:5900192.168.2.33:39213          ESTABLISHED 
tcp       100192.168.2.115:5900192.168.2.116:37023         ESTABLISHED 
tcp        00192.168.2.115:5900192.168.2.126:35725         ESTABLISHED 
tcp       100192.168.2.115:5900192.168.2.124:33955         ESTABLISHED 

[root@jeson ~]# netstat -an |grep :80
tcp        00:::80:::*                        	LISTEN      
tcp        00::ffff:192.168.5.230:80::ffff:192.168.5.14:59872   TIME_WAIT   
tcp        00::ffff:192.168.5.230:80::ffff:192.168.5.14:59873   TIME_WAIT   
tcp        00::ffff:192.168.5.230:80::ffff:192.168.5.14:59874   TIME_WAIT   
tcp        00::ffff:192.168.5.230:80::ffff:192.168.5.14:59875   TIME_WAIT   
tcp        00::ffff:192.168.5.230:80::ffff:192.168.5.1:43007    TIME_WAIT   
tcp        00::ffff:192.168.5.230:80::ffff:192.168.5.14:59848   TIME_WAIT   
tcp        00::ffff:192.168.5.230:80::ffff:192.168.5.14:59849   TIME_WAIT   

 

五、proc文件系统


虚拟文件系统: 内核、进程运行的状态信息
[root@yangs ~]# du -sh /proc 
0       /proc

/proc/cpuinfo
[root@yangs ~]# grep 'processor' /proc/cpuinfo //逻辑cpu的个数
processor       : 0
processor       : 1
[root@yangs ~]# grep 'physical id' /proc/cpuinfo //物理cpu的个数
physical id     : 0
physical id     : 0
==flags
lm(64位)
vmx 支持虚拟化 Intel
svm 支持虚拟化 AMD
[root@yangs ~]# 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@jeson ~]# less /proc/meminfo
[root@jeson ~]# 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@jeson ~]# 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@jeson ~]# uptime 
 17:20:58 up  8:33,  3 users,  load average: 0.43, 0.36, 0.36

注:如果卸载proc文件系统后。。。
[root@yangs ~]# mount
[root@yangs ~]# umount /proc/ -l

[root@yangs ~]# 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@yangs ~]# 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@yangs ~]# lscpu 
lscpu: error: cannot open /proc/cpuinfo: 没有那个文件或目录

[root@yangs ~]# top
top: /proc is not mounted, required for output data

重启挂载proc文件系统
[root@yangs ~]# mount -t proc proc /proc
-t proc 指定文件系统的类型
proc 文件系统,虚拟文件系统
/proc 挂载点

六、作业控制


进程前台、后台

[root@jeson ~]# sleep 3000 &	//运行程序(时),让其在后台执行

[root@jeson ~]# sleep 4000	//^z,将前台的程序挂起(暂停)到后台[2]+Stopped                sleep 4000

[root@jeson ~]# ps aux |grep sleep
root      88950.00.0100900556 pts/0    S    12:130:00 sleep 3000
root      88960.00.0100900556 pts/0    T    12:130:00 sleep 4000[root@jeson ~]# jobs //查看后台作业[1]-Running                 sleep 3000&[2]+Stopped               sleep 4000

[root@jeson ~]# bg %2	//让作业2在后台运行[root@jeson ~]# fg %1	//将作业1调回到前台  
[root@jeson ~]# kill %1	//kill 1,杀死PID为1的进程

注意事项:
[root@jeson ~]# gedit &
[root@jeson ~]# nohup gedit & //该进程在运行时,不依赖于任何终端

进程管理

Pingbacks已打开。

引用地址

暂无评论

发表评论