首页 > 代码库 > Linux运维系统工程师系列---14

Linux运维系统工程师系列---14

进程管理

    

什么是程序?program

程序:完成某个功能的一段代码的集合

什么是进程?

进程是程序运行之后,在内存中的状态

如何产生一个进程?

执行一个程序或者命令就可以产生一个进程


提到进程,不得不说一个目录

/proc:是一个虚拟的文件系统,这个目录下的文件和目录都是保存在内存里的

[root@server102 ~]# ll -d /proc/

dr-xr-xr-x. 157 root root 0 Oct 10 00:33 /proc/

大小是0,根本没有占用磁盘空间,就是假的。


一.进程的查看

        

进程的查看:

# man ps

ps接受以下三种格式的选项:

1、UNIX格式的,以一个-开始的   ps -a

2、BSD格式的选项,不以-开始    ps aux

3、GNU长格式选项,以--开始   ps --eo

最常用的是ps aux和ps -ef


ps命令:静态的查看进程的状态

ps常用选项:

-e:显示所有进程

-f:全格式显示

a:显示所有进程(包含其他用户的进程)

u:显示有效使用者

x:显示无控制终端的进程,与a一起使用,显示所有进程

[root@server102 ~]# ps -ef | more

UID        PID  PPID  C STIME TTY          TIME CMD

root         1     0   0 Oct18 ?        00:00:04 /sbin/init

UID——进程的拥有者

PID——进程号

PPID——父进程号

C————CPU使用的资源的百分比

STIME——开始时间

TTY——运行进程的终端的名字  tty1:文本终端   pts:伪终端,虚拟终端

?:表示该进程运行不依赖终端

TIME——命令执行时间

CMD——命令的名字

ps aux:

[root@server102 ~]# ps aux | more

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND

root         1     0.0  0.1   2900  1228 ?        Ss   Oct18   0:04 /sbin/init

%CPU——占用CPU的百分比

%MEM——占用内存的百分比

VSZ——占用虚拟内存的大小

RSS——驻留内存大小

TTY——运行进程的终端

STAT——进程的状态

START——进程开始时间

TIME——进程执行时间

COMMAND——命令

[root@server102 ~]# ps auxw     #w是宽屏的意思,可以将命令显示全


查看进程树:

[root@server102 ~]# pstree  以树的形式显示正在运行的进程


动态查看进程状态  top

[root@server102 ~]# top

top - 11:27:52 up 3 days,  6:02,  2 users,  load average: 0.00, 0.00, 0.00

   系统时间 系统连续运行3天,6小时零2分  当前有2个用户登录 系统的平均负载,最近1分钟,5分钟,15分钟的平均负载

Tasks: 143 total,   1 running, 142 sleeping,   0 stopped,   0 zombie

总共有143个进程,其中一个是正在运行的,142个休眠的,0个停止的,0个僵尸进程


Cpu(s):  2.4%us,  0.3%sy,  0.0%ni, 96.9%id,  0.0%wa,  0.3%hi,  0.0%si,  0.0%st

us:用户空间占用的CPU的百分比;

sy:系统空间占用CPU百分比

ni:改变进程优先级的进程所占用的cpu百分比;

id:空闲进程占用空间百分比  idle

wa:IO等待占用CPU百分比

hi:硬中断占用的CPU的百分比

si:软中断占用的CPU的百分比

st:steal


Mem:   1030680k total,   870564k used,   160116k free,    88228k buffers

总共内存,已使用的,空闲的,缓存的

Swap:  2097144k total,     4244k used,  2092900k free,   543036k cached

交换分区总大小,使用的大小,空闲的大小,缓存的交换分区大小


  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND            

13098 root      20   0 70604  21m 7592 S  3.0  2.1  10:57.93 Xorg 

PR:优先级

NI:谦让值

VIRT:进程使用的虚拟内存的大小

RES:驻留内存大小

SHR:共享内存的大小

S:进程状态

TIME+:进程使用的CPU时间



只动态查看某个进程的状态

top -p pid

[root@server102 ~]# top -p 28550


二.前后台

        

前台运行——命令会占用运行它的终端,其他人无法再使用此终端

后台运行——命令运行之后,不会占用终端,该终端可以被其他用户使用


前台进程怎么形成?

直接在终端执行命令

[root@server102 ~]# firefox http://172.16.254.253/note/bj.ncd

后台进程怎么形成?

1)命令的调用,就是说执行命令时候,直接放到后台运行

[root@server102 ~]# firefox http://172.16.254.253/note/bj.ncd &

[1] 9834

2)如何将一个已经运行的前台进程转到后台运行

[root@server102 ~]# firefox http://172.16.254.253/note/bj.ncd

^Z     按下【ctrl】+z

[1]+  Stopped                 firefox http://172.16.254.253/note/bj.ncd

这样执行完,进程会转到后台,但是是停止的状态

查看后台运行进程的状态:

[root@server102 ~]# jobs

[1]+  Stopped                 firefox http://172.16.254.253/note/bj.ncd

前后台运行相关的命令:

bg:指定任务在后台运行

——激活后台停止的进程

[root@server102 ~]# bg %1

[1]+ firefox http://172.16.254.253/note/bj.ncd &

[root@server102 ~]# jobs

[1]+  Running                 firefox http://172.16.254.253/note/bj.ncd &

fg:激活后台命令,变成前台运行

[root@server254 ~]# fg %1

firefox http://172.16.254.253/note/bj.ncd

disown:将目标任务从列表删除,只是不能用jobs来查看了,但是可以用ps -ef查到该进程

[root@server102 ~]# fg %1

firefox http://172.16.254.253/note/bj.ncd

^Z

[1]+  Stopped                 firefox http://172.16.254.253/note/bj.ncd

[root@server102 ~]# bg %1

[1]+ firefox http://172.16.254.253/note/bj.ncd &

[root@server102~]# disown %1

[root@server102 ~]# jobs

[root@server102 ~]# ps -ef | grep firefox | grep -v grep

root      9940  9927  0 11:51 pts/0    00:00:00 /usr/lib/firefox/firefox


前后台运行,终端一关闭,进程就终止。


保证关闭终端后,进程依然继续运行呢?

[root@server102 ~]# nohup firefox http://172.16.254.253/note/bj.ncd &

关闭终端,再查看进程,依然在

[root@server102 ~]# ps -ef | grep firefox | grep -v grep

root     10291     1  2 13:38 ?        00:00:01 /usr/lib/firefox/firefox 

三.进程的终止

        

进程间的通信(IPC:Interconnect Progress Communication)


进程间通信方式:

1、信号 signal

2、消息 message

3、共享内存 shared memory


常用的信号的含义:

[root@server102 ~]# kill -l   #显示信号列表

1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP

 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1

11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM

16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP

21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ

26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR

31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3

38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8

43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13

48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12

53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7

58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2

63) SIGRTMAX-1 64) SIGRTMAX


1)SIGHUP(1):重新读取配置。不停服务的情况下,重新读取配置

2)SIGINT(2):中断,ctrl+c

3)SIGKILL(9):杀死进程,必死无疑的

4)SIGTERM(15):终止进程,但是进程不一定被终结。


强制结束

1)遇到再说

2)例子:ctrl+c

一个标签:[root@server102 ~]# sleep 300

另一个标签:[root@server102 ~]# ps aux | grep sleep | grep -v grep

root     10378  0.0  0.0   4064   524 pts/0    S+   13:47   0:00 sleep 300

[root@server102 ~]# kill -2 10378

3)kill -9 pid

[root@server102 ~]# ps -ef | grep firefox

root     10291     1  0 13:38 ?        00:00:01 /usr/lib/firefox/firefox http://172.16.254.253/note/bj.ncd

root     10406 10333  0 13:49 pts/0    00:00:00 grep firefox

[root@server102 ~]# kill -9 10291

[root@server102 ~]# ps -ef | grep firefox

root     10410 10333  0 13:49 pts/0    00:00:00 grep firefox

4)不常用,先不说

其他相关命令:

killall:

[root@server102 test]# cat loop.sh 

#! /bin/bash

while true

do 

  echo hello > /dev/null

done

/dev/zero:无穷多个0

/dev/null:不管你扔进去什么都是空,“黑洞”

[root@server102 test]# ps -ef | grep loop

root     10505 10333 98 13:53 pts/0    00:01:10 /bin/bash /test/loop.sh

root     10523 10333  0 13:54 pts/0    00:00:00 grep loop

[root@server254 test]# ps -ef | grep loop

root     10505 10333 94 13:53 pts/0    00:01:21 /bin/bash /test/loop.sh

root     10527 10379 36 13:54 pts/1    00:00:01 /bin/bash /test/loop.sh

root     10529 10333  0 13:54 pts/0    00:00:00 grep loop

[root@server254 test]# killall loop.sh

[2]+  Terminated              /test/loop.sh

[root@server102 test]# ps -ef | grep loop

root     10535 10333  0 13:55 pts/0    00:00:00 grep loop



xkill:杀死图形化资源

运行之后,鼠标会由箭头变成一个“X”,点什么什么死

四.程序运行的nice值

        

nice:谦让值

作用:

指定或者调整用户进程的nice值

nice值越高,抢占资源的能力就越弱;

nice值越低,抢占资源的能力越强。

1、相关命令

nice:运行程序的时候设置谦让值

格式:

nice -n num command

renice:对已经运行的进程修改谦让值

 格式:

   renice num pid  或者 renice -n num -p pid

2、举例

1)使用nice直接指定

[root@server102 test]# nice -n 7 ./loop.sh &

[1] 10615

[root@server102 test]# nice -n 14 ./loop2.sh &

[2] 10623

[root@server102 test]# top   查看抢占CPU资源的情况

2)使用renice调整运行中的nice值

[root@server102  test]# renice 19 10615

[root@server102  test]# top

10615: old priority 7, new priority 19

 PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+   COMMAND            

10623 root      34  14  5068 1192 1052 R 70.4  0.1   0:49.70 loop2.sh           

10615 root      39  19  5068 1192 1052 R 23.6  0.1   3:34.91 loop.sh 


    


本文出自 “空谷幽兰” 博客,请务必保留此出处http://2489843.blog.51cto.com/2479843/1538104