进程的状态:
- 运行 ( 正在运行或在运行队列中等待 )
- 中断 ( 休眠中, 受阻, 在等待某个条件的形成或接受到信号 )
- 不可中断 ( 收到信号不唤醒和不可运行, 进程必须等待直到有中断发生 )
- 僵尸 ( 进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放 ) 子进程退出,父进程运行,父进程没有获取子进程的退出状态,子进程为僵尸状态
- 停止 ( 进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行 ,SIGCONT继续运行)
ps
命令参数:
(1)ps -a:显示同一终端下的所有程序
(2)ps -e:显示同一终端下的所有程序
(3)ps -A:显示所有的进程
(4)ps -N:反向选择
(5)ps -m:显示所有的线程
(6)ps -f:全格式
(7)ps -u root:显示root进程用户信息
(8)ps -ef:显示所有命令,连带命令行,可以结合grep xx,来查看特定的进程
(9)ps -eo lstart 查看进程的启动时间
(10)ps -eo etime 查看进程的运行时间
(11)ps -eo pid,lstart,etime | grep [ pid ] 查看进程的pid、启动时间、运行时间
(12)ps aux 显示所有当前进程。-a 代表 all。同时加上 x参数会显示没有控制终端的进程。进程比较多可以结合more或者less进行分页查看
(13)ps -C 进程号:查看子进程
(14)ps -o:用户自定义格式
(15)ps r:查看正在运行中的进程
2.ps工具标识进程的5种状态码:
R 运行 runnable (on run queue)
S 中断 sleeping
D 不可中断 uninterruptible sleep (usually IO)
T 停止 traced or stopped
Z 僵死 a defunct (”zombie”) process
< 优先级高的进程
N 优先级较低的进程
L 有些页被锁进内存;
s 进程的领导者(在它之下有子进程);
l 多进程的(使用 CLONE_THREAD, 类似 NPTL pthreads);
“+” 位于后台的进程组;
参数:
(1)PID:进程ID
(2)PPID:父进程的进程ID
(3)TTY:与进程关联的终端ID
(4)TIME:进程使用的总cpu时间
(5)CMD:正在执行的命令行命令
(6)C:CPU使用的资源百分比
(7)UID:用户ID
(8)STIME、START:启动时间
(9)VSZ:进程虚拟大小
(10)RSS:驻留中页的数量
(11)STAT:进程状态
(12)%CPU:进程占用的CPU百分比
(13)%MEM:占用内存的百分比
(14)NI:nice值。负值表示高优先级,正值表示低优先级
top
查看系统性能
命令参数:
(1)-b 批处理
(2)-c 显示完整的治命令
(3)-I 忽略失效过程
(4)-s 保密模式
(5)-S 累积模式,显示程序信息
(6)-i<时间> 设置间隔时间
(7)-u<用户名> 指定用户名
(8)-p<进程号> 指定进程
(9)-n<次数> 循环显示的次数
参数说明:
(1)时间:当前系统时间。当然也可以使用date命令进行查看
(2)up 15 days:已经运行的时间。命令:last reboot
(3)2users:当前登陆的用户。命令:who
(4)load average:平均负载值,三个数字表示在前1,5,15分钟系统的平均负载。此值保持在1以下,一般0.7以下算正常(多核处理器需要除以核心数)。
看系统是多少核的,直接输入命令top,然后按1
(5)%Cpu(s):CPU状态
us:用户模式下所花费CPU时间
sy:内核进程所花费的CPU时间
ni:用户进程改变过优先级的进程占用CPU时间
id:CPU处在中断(空闲)状态的时间
wa:IO等待所占用的CPU时间
hi:硬件中断占用CPU
si:软件中断占用CPU
st:丢失时间占用CPU
注:
CPU Load 低,CPU利用率低:CPU资源良好,系统运行正常
CPU Load 低,CPU利用率高:确认是否程序有问题,少量进程消耗大量资源
CPU Load 高,CPU利用率低:文件IO和网络IO操作较多,IO瓶颈
CPU Load 低,CPU利用率低:CPU资源不足
(6)KiB Mem:内存信息
total:系统现在共有的内存
free:空闲内存
used:被程序占用的内存
buff/cache:磁盘交换或者缓存占用的内存
(7)KiB Swap:Swap信息(交换分区)
total:系统现在共有的Swap内存
free:空闲Swap内存
avail Mem:可用于进程下一次分配的无力内存数量
参数:
(1)PID:进程ID
(2)PPID:父进程的进程ID
(3)PR:进程执行优先级,越低越优先,系统定义的
(4)NI:nice值。优先级加权,-20~19(root) 0~19(user)
(5)VIRT:进程使用的内存总量,SWAP+物理内存
(6)SHR:共享内存大小
(7)S:进程状态
(8)%CPU:进程占用的CPU百分比
(9)%MEM:占用物理内存的百分比
(10)TIME:进程使用的总cpu时间
(11)COMMAND:正在执行的命令行命令
kill
格式:
kill [参数][进程号]
命令参数
(1)kill -l : 显示信号
(2)kill -u: 指定用户
(3)kill -a:当处理当前进程时,不限制命令名和进程号的对应关系
(4)kill -p:指定kill 命令只打印相关进程的进程号,而不发送任何信号
(5)kill -s: 指定发送信号
- (1)HUP :终端断线
- (2)INT :中断进程,等同于ctrl+C
- (3)QUIT :退出进程,等同于ctrl+
(4)ILL :执行了非法指令. 通常是因为可执行文件本身出现错误, 或者试图执行数据段. 堆栈溢出时也有可能产生这个信号。
(5)TRAP :由断点指令或其它trap指令产生. 由debugger使用。
(6)ABRT :调用abort函数生成的信号。
(7)BUS :非法地址, 包括内存地址对齐(alignment)出错。比如访问一个四个字长的整数, 但其地址不是4的倍数。它与SEGV的区别在于后者是由于对合法存储地址的非法访问触发的(如访问不属于自己存储空间或只读存储空间)。
(8)FPE :在发生致命的算术运算错误时发出. 不仅包括浮点运算错误, 还包括溢出及除数为0等其它所有的算术的错误。 - (9)KILL:强制立刻杀死进程,本信号不能被阻塞、处理和忽略。
(10)USR1 :留给用户使用
(11)SEGV :试图访问未分配给自己的内存, 或试图往没有写权限的内存地址写数据。
(12)USR2:留给用户使用
(13)PIPE :管道破裂。这个信号通常在进程间通信产生,比如采用FIFO(管道)通信的两个进程,读管道没打开或者意外终止就往管道写,写进程会收到SIGPIPE信号。此外用Socket通信的两个进程,写进程在写Socket的时候,读进程已经终止。
(14)ALRM :时钟定时信号, 计算的是实际的时间或时钟时间. alarm函数使用该信号。 - (15)TERM:程序结束(terminate)信号,可以使得进程在退出之前清理并释放资源。与SIGKILL不同的是该信号可以被阻塞和处理。通常用来要求程序自己正常退出,shell命令kill缺省产生这个信号。如果进程终止不了,我们才会尝试KILL。
(17)CHLD :子进程结束时, 父进程会收到这个信号。 - (18)CONT:继续进程。让一个停止(stopped)的进程继续执行. 本信号不能被阻塞. 可以用一个handler来让程序在由stopped状态变为继续执行时完成特定的工作. 例如, 重新显示提示符...
- (19)STOP:停止(stopped)进程的执行. 注意它和terminate以及interrupt的区别:该进程还未结束, 只是暂停执行. 本信号不能被阻塞, 处理或忽略。
(20)TSTP :停止进程的运行, 但该信号可以被处理和忽略. 用户键入SUSP字符时(通常是Ctrl-Z)发出这个信号。
(21)TTIN :当后台作业要从用户终端读数据时, 该作业中的所有进程会收到SIGTTIN信号. 缺省时这些进程会停止执行。
(22)TTOU :类似于SIGTTIN, 但在写终端(或修改终端模式)时收到。
(23)URG :有"紧急"数据或out-of-band数据到达socket时产生
(24)XCPU :超过CPU时间资源限制. 这个限制可以由getrlimit/setrlimit来读取/改变。
(25)XFSZ :当进程企图扩大文件以至于超过文件大小资源限制。
(26)VTALRM :虚拟时钟信号. 类似于SIGALRM, 但是计算的是该进程占用的CPU时间。
(27)PROF :类似于SIGALRM/SIGVTALRM, 但包括该进程用的CPU时间以及系统调用的时间。
(28)WINCH :窗口大小改变时发出。
(29)IO :文件描述符准备就绪, 可以开始进行输入/输出操作。
(31)SYS :非法的系统调用。
INFO
EMT :非法地址, 包括内存地址对齐(alignment)出错。比如访问一个四个字长的整数, 但其地址不是4的倍数。它与SEGV的区别在于后者是由于对合法存储地址的非法访问触发的(如访问不属于自己存储空间或只读存储空间)。
只有第9种信号(SIGKILL)才可以无条件终止进程,其他信号进程都有权利忽略。







网友评论