进程状态



Linux 内核:抢占式多任务        



进程类型   



守护进程:daemon,在系统引导过程中启动的进程,和终端无关进程。



前台进程:跟终端相关,通过终端启动的进程



注意:两者可相互转化



       进程状态



  • 运行态:running
  • 就绪态:ready
  • 睡眠态:

        可中断:interruptable



        不可中断:uninterruptable



        停止态:stopped,暂停于内存,但不会被调度,除非手动启动



        僵尸态:zombie,结束进程,父进程结束前,子进程不关闭



    僵尸进程



        一个子进程在其父进程没有调用wait()或waitpid()的情况下退出。这个子进程就是僵尸进程。如果其父进程还存在而一直不调用wait,则该僵尸进程将无法回收,等到其父进程退出后该进程将被init回收。



    孤儿进程



        一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。



=====僵尸进程将会导致资源浪费,而孤儿进程则不会。====



进程的分类



CPU-Bound:CPU密集型,非交互



    在多重程序系统中,大部份时间用来做计算、逻辑判断等CPU动作的程序称之CPU bound。例如一个计算圆周率至小数点一千位以下的程序,在执行的过程当中 绝大部份时间用在三角函数和开根号的计算,便是属于CPU bound的程序。



IO-Bound:IO密集型,交互



    I/O bound 指的是系统的CPU效能相对硬盘/内存的效能要好很多,此时,系统运作,大部分的状况是 CPU 在等 I/O (硬盘/内存) 的读/写,此时 CPU Loading 不高。



Linux系统状态的查看及管理工具



pstree  ps  pidof  pgrep  top  htop  glance  pmap  vmstat  dstat  kill  pkill  job  bg  fg  nohup



进程相关



    pstree [-a] [-c] [-h|-Hpid] [-l] [-n] [-p] [-u] [-Z] [-A|-G|-U] [pid|user]



参数说明



-a:显示出该命令的参数,假如这个命令进程被其他进程替换掉,那么进程将显示在括号中-a选项包含有压实进程树的选项,对于相同的进程,会使用n*(process)的形成展现出来



-c:关闭禁用显示结果进程树,在默认情况下,进程树是会被压缩的。不管有多少进程名相同的进程,都会逐个显示出来。  



-G:使用vt100线性描述树



 -h:突空出显示当前进程的父进程并高亮显示出来,如果没有父进程那么什么都不会显示。



-H:突出显示出指定进程的父进程信息并高亮显示出来,使用方法为pstree -H PID



-l:显示长格式命令选项,在默认的情况下,命令行最多显示宽度为132bit,超过将不能正常显示。



-n:基于进程相同的祖先来进行排序,可以命名pid来代替进程名称。



-p:显示所有的时程,显示结果包含进程名和时进程ID



-u:显示出用户的UID,无论何时,这个UID和进程比较UID参数,这个新的UID将在进程名后显示不同的参数。



-U:使用utf-8字符集以十进制表示



pstree -pc



    ps默认显示当前终端中的进程



参数:说明



a:选项包括所有终端中的进程



x:选项包括不连接终端的进程



u:选项显示进程所有者的信息



f:选项显示进程的父进程



o:属性...选项显示定制的信息:pid、comm、%cpu、%mem、state、tty、euser、ruser



        字段含义



字段:含义



VSZ:Virtual memory SiZe,虚拟内存集,线性内存



RSS:ReSident Size,常驻内存集



ni:nice值



pri:priority 优先级



psr:processor CPU编号



rtprio:实时优先级



            STAT进程状态



字段:含义



R:running



S:interruptable sleeping



D:uninterruptable sleeping



T:stopped



Z:zombie



+:前台进程



l:多线程进程



L:内存 分页并带锁



N:低优先级进程



<:高优先级进程



s:session leader



        常用组合



  •  -ef

-e:显示所有进程



-f:显示完整格式的程序信息



--eFH



-F:显示完整格式的进程信息



-H:以进程层级格式显示进程相关信息



    进程优先级调整



静态优先级:100-139



进程默认启动时的nice 值为0,优先级为120



只有根用户才能降低nice值(提高优先性)



        nice [OPTION] [COMMAND [ARG]...]



执行时指定


        nice -n -5 /usr/local/mysql/bin/mysqld_safe &


renice [-n] priority pid...


        renice -n 2 -p 3432


        -n后面是优先级的值;-p是进程号


top命令。输入r,然后根据提示输入进程ID,再输入优先级数值。


查看:


ps    axo    pid    comm    ni


例1



[root@localhost ~]# ps -e #显示所有进程


PID TTY TIME CMD


1 ? 00:00:00 init


2 ? 00:00:00 migration/0


3 ? 00:00:00 ksoftirqd/0



。。。。。。。。。省略。。。。。。。。。。。。。。



[root@localhost ~]# ps aux #不区分终端,显示所有用户的所有进程


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


root 4535 0.0 0.5 64340 11208 ? S 18:59 0:00 /usr/libexec/notification-daemon


root 4538 2.8 0.4 51116 8712 pts/2 SL+ 18:59 0:44 mplayer /mnt/usb/music/20080625211631.mp3 /mnt/usb/music/46250194.mp3 /mnt



。。。。。。。。。省略。。。。。。。。。。。。。。



[root@localhost ~]# ps -ef #显示所有进程的UID,PPIP,C与STIME栏位


UID PID PPID C STIME TTY TIME CMD


root 1 0 0 18:24 ? 00:00:00 init [3]


root 2 1 0 18:24 ? 00:00:00 [migration/0]


root 3 1 0 18:24 ? 00:00:00 [ksoftirqd/0]



。。。。。。。。。省略。。。。。。。。。。。。。。



[root@localhost ~]# ps -u zhangy #显示zhangy用户的所有进程


PID TTY TIME CMD


3804 ? 00:00:00 httpd


3805 ? 00:00:00 httpd


3806 ? 00:00:00 httpd


。。。。。。。。。省略。。。。。。。。。。。。。。



搜索进程


最灵活:ps    选项 | 其他命令


按预定义的模式:pgrep


pgrep [options] pattern


参数|含义


-u uid|effective user ,生效者


-U uid|real user ,真正发起运行命令者


-t terminal| 与指定终端相关的进程


-l| 显示进程名


-a| 显示完整格式的进程 名


-P pid| 显示指定进程的子进程


  1. tty
  2. pgrep -lt pts/0 显示pts/0终端的进程名和pid
  3. pgrep -lu root 显示root用户的相关进程

按确切的程序名称:/sbin/pidof


pidof bash


按确切的端口:lsof


  • lsof -i:80 查看tcp或udp为80的端口( netstat -lnp |grep 80)
  • lsof -u username 显示所属user进程打开的文件
  • lsof -g gid 显示归属gid的进程情况
  • lsof +d /DIR/ 显示目录下被进程打开的文件
  • lsof filename 显示打开指定文件的所有进程
  • lsof -i -U //显示所有打开的端口和UNIXdomain文件
  • lsof -i@192.168.1.91 查看指定网口有哪些进程在使用

uptime显示当前时间,系统已启动的时间、当前上线人数,系统平均负载(1、5、10分钟的平均负载,一般不会超过1)


系统平均负载:


指在特定时间间隔内运行队列中的平均进程数 - ==通常每个CPU内核的当前活动进程数不大于3,那么系统的性能良好。如果每个CPU内核的任务数大于5,那么 此主机的性能有严重问题==

- 如果linux 主机是1 个双核CPU,当Load Average为6的时候说明机器已经被充分使用



  1. uptime
  2. 00:48:13 up 8:02, 2 users, load average: 0.00, 0.01, 0.05
  3. 00:48:13 up指开机时间
  4. 8:02指系统运行了8分零2秒
  5. 2 users表示当前有两个终端登录,至少有一个tty1
  6. oad average: 0.00, 0.01, 0.05指1,5,10分钟内的平均负载

top 【-dupnb】



-b |批处理



-c| 显示完整的命令



-I |忽略失效过程



-s |保密模式



-S |累积模式



-i<时间> |设置间隔时间



-d <时间>|默认3s



-u<用户名>| 指定用户名



-p<进程号> |指定进程



-n<次数> |循环显示的次数



头部栏位信息简介



us |用户空间



sy |内核空间



ni |改变过优先级的进程占用CPU的百分比



id |空闲CPU百分比



wa |IO等待占用CPU的百分比



hi |硬中断 通过鼠标,硬盘数据移动等操作发送中断信号



si |软中断(模式切换)软件对cpu的操作,比如进程之间的切换



st|虚拟机偷走的时间




TOP交互命令

在top命令执行过程中可以使用的一些交互命令。这些命令都是单字母的,如果在命令行中使用了s选项,其中一些命令可能会被屏蔽。 h:显示帮助画面,给出一些简短的命令总结说明 M:根据驻留内存大小进行排序 P:根据CPU使用百分比大小进行排序 T:根据时间/累计时间进行排序 k:终止一个进程 i:忽略闲置和僵死进程。这是一个开关式命令 q:退出程序 r:重新安排一个进程的优先级别 S:切换到累计模式 s:改变两次刷新之间的延迟时间(单位为s),如果有小数,就换算成m s。输入0值则系统将不断刷新,默认值是5s f或者F:从当前显示中添加或者删除项目 o或者O:改变显示项目的顺序 l:切换显示平均负载和启动时间信息 m:切换显示内存信息 t:切换显示进程的CPU状态信息 c:切换显示命令名称和完整命令行 W:将当前设置写入~/.toprc文件中 内存相关

vmstat [options] [delay[count]]

vmstat 2 5 每2s刷新,一次刷新5次 -s 显示内存的统计数据 iostat统计CPU和设备IO信息(每个磁盘读写速率统计)

iostat 1 10    1s刷一次刷新10次停止