Linux-系统管理-进程管理

Linux-系统管理-进程管理

1.Linux-进程管理

Linux的进程管理相当于Windows的任务管理器 举例子:Windows的任务管理
程序:
进程:
守护进程:
僵尸进程:
孤儿进程:
进程管理的相关命令:ps ,top
后台管理
结束进程
系统负载
Windows的任务管理器:
在这里插入图片描述

1.1 进程

进程名称含义
程序安装代码,安装包,在磁盘之上
进程运行中的程序称之为进程,举例:当运行一个命令时就是一个进程,远程连接的服务、网络服务
守护进程一直运行的进程称为守护进程,也可称为服务

程序的含义:如果您在一个符合大多数的计算机上,操作系统例如Windows、Linux等,加载并执行很多的程序,在这种情况下,每一个程序是一个单独的映射,并不是计算机上的所有可执行程序。它是指为了得到某种结果而可以由计算机等具有信息处理能力的装置执行的代码化指令序列,或者可以被自动转换成代码化指令序列的符号化指令序列或者符号化语句序列。同一计算机程序的源程序和目标程序为同一作品。

1.2 进程的种类

进程的含义
进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。

进程:正常进程和僵尸进程
(1)正常进程:
主进程process 相当于皇帝,子进程是child process 相当于大臣-----》执行任务(exec)--------》child process
(2)僵尸进程:
主进程process 相当于皇帝,子进程是child process 挂掉了,占用了系统的资源, 相当于大臣-----》执行任务(exec)--------》child process 。
僵尸进程是子进程比父进程先结束,父进程没有回收子进程,释放子进程占用资源,这时子进程成为僵尸进程。
处理如下:找到僵尸进程上级进程,主进程重启Linux 其它进程结束。
展示僵尸进程

[root@localhost ~]# cat zombine.c 
#include <sys/types.h>
#include <sys/wait.h>
#include <errno.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
/*
 *  desc:用于模拟僵尸进程.代码.zhuixin.com
 *
*/
int main(int argc,char *(argv[]))
{
pid_t pid;
pid = fork();
if (pid == 0) {
int iPid = (int)getpid();
fprintf(stderr,"I am child,%d\n",iPid);
sleep(1);
fprintf(stderr,"Child exits\n");
return EXIT_SUCCESS;
}
int iPid = (int)getpid();
fprintf(stderr,"I am parent,%d\n",iPid);
fprintf(stderr,"sleep......\n");
sleep(600);
fprintf(stderr,"parent exits\n");
return EXIT_SUCCESS;
}
c语言进行编译安装gcc  命令
 [root@localhost ~]# yum -y install gcc
 进行编译
[root@localhost ~]# gcc zombine.c -o zombine.c
执行
[root@localhost ~]# ./zombine.c

这是僵尸进程 zombie
在这里插入图片描述
过滤僵尸进程:过滤僵尸进程Z
在这里插入图片描述

解决僵尸进程:首先找到僵尸进程上级进程
在这里插入图片描述

过滤出僵尸进程的父进程
[root@localhost ~]# pstree -p
systemd(1)─┬─NetworkManager(1154)─┬─{NetworkManager}(1161)
           │                      └─{NetworkManager}(1170)
           ├─VGAuthService(938)
           ├─abrt-watch-log(942)
           ├─abrtd(940)
           ├─agetty(966)
           ├─auditd(875)───{auditd}(876)
           ├─crond(959)
           ├─dbus-daemon(933)───{dbus-daemon}(934)
           ├─firewalld(1017)───{firewalld}(1310)
           ├─lvmetad(508)
           ├─master(1639)─┬─pickup(3594)
           │              └─qmgr(1643)
           ├─polkitd(949)─┬─{polkitd}(969)
           │              ├─{polkitd}(970)
           │              ├─{polkitd}(971)
           │              ├─{polkitd}(976)
           │              ├─{polkitd}(1005)
           │              └─{polkitd}(1013)
           ├─rsyslogd(1486)─┬─{rsyslogd}(1490)
           │                └─{rsyslogd}(1497)
           ├─sshd(1484)─┬─sshd(2993)───bash(2997)───zombine.c(3833)───zombine.c(3834)   结束僵尸的上级进程  
           │            └─sshd(3786)───bash(3790)───pstree(3843)
           ├─systemd-journal(483)
           ├─systemd-logind(932)
           ├─systemd-udevd(519)
           ├─tuned(1487)─┬─{tuned}(1727)
           │             ├─{tuned}(1728)
           │             ├─{tuned}(1730)
           │             └─{tuned}(1732)
           └─vmtoolsd(945)───{vmtoolsd}(1035)
 结束僵尸进程的父进程
[root@localhost ~]# kill 3833

(3)孤儿进程
孤儿进程是在其父进程执行完成或被终止后仍继续运行,孤儿进程直接被系统直接接管(systemd进程)。

2. 进程状态的相关命令

进程的内置命令含义
psps命令查看当前一会的进程状态,用于检查或者取值
toptop命令是动态的查看,按q退出,负载,僵尸进程,cpu,内存,相当于Windows的任务管理器

(1)ps 命令

ps -ef    
UID 进程属于的用户  
PID 进程的id号  绝大部分是随机的     
PPID 是父进程的id号 pstree -p  查看详细关系
CMD 进程的名字  带中阔号是内核中的 
[root@localhost ~]# ps -ef
UID         PID   PPID  C STIME TTY          TIME   CMD
root          1      0  0 04:07 ?        00:00:07 /usr/lib/systemd/systemd --switched-root --syst
root          2      0  0 04:07 ?        00:00:00 [kthreadd]
ps aux的命令每一列含义
第1列	 进程属于哪个用户
第2列   这个进程的进程号
第3列   进程使用掉的CPU百分比
第4列   进程占用物理内存的百分比
第5列   占用虚拟内存VSZ  单位:Kbytes
第6列 	占用物理内存 RSS  单位:Kbytes
第7列   终端TTY ,终端在哪个终端机上运行的,与这个终端机无关 则显示“?”,  
第8列    STAT 进程状态  R:正在运行  S:正在中断睡眠  D:不可中断睡眠   T:停止   
			 Z:已经终止,其父进程无法正常运行 ,变成僵尸进程(zomble)的状态
			 +:前台运行   :多线程模式    N:低优先级进程    <:高优先级进程    s:进程领导者
			 L:将页面锁定在内存中   
第9列     START 进程启动时间
第10列  TIME 进程使用CPU的时间
第11列  COMMAND 进程的实际命令 
[root@localhost ~]# ps aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.3 128408  7036 ?        Ss   04:07   0:07 /usr/lib/systemd/systemd --swit
root          2  0.0  0.0      0     0 ?        S    04:07   0:00 [kthreadd]

ps aux命令查看每一列的含义
在这里插入图片描述
ps命令选项参数详解

参数选项含义
-a显示终端下执行的过程
a显示终端的所有进程,含概进程的完整路径
x终端无关的进程
u终端无关的进程
-u用户相关的进程信息
-e显示所有进程
-f显示UID 、PID…
-H进程树
-I显示详细的进程状态
-o输出指定字段,以逗号分隔

进程状态STAT

STAT进程的状态含义
R(running )进程运行
S可中断进程(可以随时停止)
T(terminate)进程被暂停\挂起 ctrl +z
D不可中断进程(IOduxie)
Z zombie僵尸进程
s进程是控制进程,Ss进程的领导者,父进程/主进程
<进程运行在高优先级上,S<优先级较高的进程
N进程运行在低优先级上,SN优先级较低的进程
+当前进程运行在前台,R+表示进程运行在前台
l(小写L)进程是多线程的,Sl 表示进程以多线程运行(与程序)
进程状态
R+    前台运行中的进程
R      后台运行的进程
S     	可中断进程
T     后台挂起的进程(挂起的相关命令)
D    不可中断的进程(io 进程读写)
Ss   可中断进程、管理进程
S<  可中断的高优先级进程
Ssl   可中断的多线程的管理进程
Z     僵尸进程

(2) top命令

swap叫交换分区,当内存不足的时候临时充当为内存,swap本质是磁盘上面的一块空间,速度没有内存快
速度比对:cpu------>内存--------->磁盘

[root@localhost ~]# top					
												      					详细用户信息
													   					通过w查看  ,  查看负载:衡量系统繁忙程度w/uptime
						上机时间开机多久,				登录用户,	平均负载 :1分钟,5分钟,15分钟		
第1行 w/uptime   top - 11:02:40 	 up 17:14	  ,  3 users, 	   		load average: 0.02, 0.02, 0.05        
										     106个进程,1个运行中 R,105个休眠S/Ss, 0个挂起的T,0个僵尸进程 Z
第2行 进程汇总信息  Tasks: 106 total,  	 1 running, 		105 sleeping	,   	0 stopped,   0 zombie
						user用户使用率cpu,system系统CPU,nice高优先级,idle空闲进程,walt io等待,硬中断,软中断,虚拟机steal
第3行 CPU使用率信息  %Cpu(s): 	 0.3 us,  0.7 sy, 	0.0 ni, 	99.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
                                                             总内存,  可用内存,已用内存,缓存/缓冲占用内存     
第4行 内存使用情况   KiB Mem :  2027876 total,  1231980 free,   208932 used,   586964 buff/cache
													        总swap,	 可用swap,		已用swap,当前可用内存	
第4行 Swap使用情况  KiB Swap:  2097148 total,  2097148 free,      0 used.  1656148 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                     
   945 root      20   0  305500   6564   5156 S  1.3  0.3   6:14.55 vmtoolsd                    
  4241 root      20   0  161992   2188   1552 R  0.3  0.1   0:00.10 top                         
     1 root      20   0  128408   7036   4164 S  0.0  0.3   0:08.08 systemd                     
     2 root      20   0       0      0      0 S  0.0  0.0   0:00.05 kthreadd                    
     4 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0H                
     6 root      20   0       0      0      0 S  0.0  0.0   0:04.71 ksoftirqd/0                 
     7 root      rt   0       0      0      0 S  0.0  0.0   0:00.00 migration/0                 
     8 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcu_bh                      
     9 root      20   0       0      0      0 S  0.0  0.0   0:03.02 rcu_sched                   
    10 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 lru-add-drain               
    11 root      rt   0       0      0      0 S  0.0  0.0   0:06.05 watchdog/0                  
    13 root      20   0       0      0      0 S  0.0  0.0   0:00.01 kdevtmpfs                   
    14 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 netns                       
    15 root      20   0       0      0      0 S  0.0  0.0   0:00.07 khungtaskd                  
    16 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 writeback                   
    17 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kintegrityd

(3) 举例子
过滤出xxx的进程

过滤出的结果通过grep -v grep 排除grep命令自己本身的进程

[root@localhost ~]# ps aux |grep xxx
[root@localhost ~]# ps -ef |grep xxx

按照树形查看进程信息

pstree -p 命令显示树形结构,并展示pid
用于查看进程间的关系

[root@localhost ~]# pstree
systemd─┬─NetworkManager───2*[{NetworkManager}]
        ├─VGAuthService
        ├─abrt-watch-log
        ├─abrtd
        ├─agetty
        ├─auditd───{auditd}
        ├─crond
        ├─dbus-daemon───{dbus-daemon}
        ├─firewalld───{firewalld}
        ├─lvmetad
        ├─master─┬─pickup
        │        └─qmgr
        ├─polkitd───6*[{polkitd}]
        ├─rsyslogd───2*[{rsyslogd}]
        ├─sshd─┬─sshd───bash
        │      └─sshd───bash───pstree
        ├─systemd-journal
        ├─systemd-logind
        ├─systemd-udevd
        ├─tuned───4*[{tuned}]
        └─vmtoolsd───{vmtoolsd}
[root@localhost ~]# pstree -p
systemd(1)─┬─NetworkManager(1154)─┬─{NetworkManager}(1161)
           │                      └─{NetworkManager}(1170)
           ├─VGAuthService(938)
           ├─abrt-watch-log(942)
           ├─abrtd(940)
           ├─agetty(966)
           ├─auditd(875)───{auditd}(876)
           ├─crond(959)
           ├─dbus-daemon(933)───{dbus-daemon}(934)
           ├─firewalld(1017)───{firewalld}(1310)
           ├─lvmetad(508)
           ├─master(1639)─┬─pickup(4854)
           │              └─qmgr(1643)
           ├─polkitd(949)─┬─{polkitd}(969)
           │              ├─{polkitd}(970)
           │              ├─{polkitd}(971)
           │              ├─{polkitd}(976)
           │              ├─{polkitd}(1005)
           │              └─{polkitd}(1013)
           ├─rsyslogd(1486)─┬─{rsyslogd}(1490)
           │                └─{rsyslogd}(1497)
           ├─sshd(1484)─┬─sshd(4065)───bash(4069)
           │            └─sshd(4452)───bash(4456)───pstree(4856)
           ├─systemd-journal(483)
           ├─systemd-logind(932)
           ├─systemd-udevd(519)
           ├─tuned(1487)─┬─{tuned}(1727)
           │             ├─{tuned}(1728)
           │             ├─{tuned}(1730)
           │             └─{tuned}(1732)
           └─vmtoolsd(945)───{vmtoolsd}(1035)
 [root@localhost ~]# ps auxf

取某些部分的内容

NR 代表行号 行号>1 NR>1 、行号>=2 NR>=2 , NF是列 (NF-1)

使用awk取列
[root@localhost ~]# ps aux |awk '{print $1,$2,$3}'
ps 命令的选项,可以输出指定的内容
[root@localhost ~]# ps -axo user,%cpu,stat
awk 命令写法,排除第一行,从第二行开始   NR:代表行号
awk格式语法
awk  '{print   某一列$1}'
awk  '条件{print  某一列}'
[root@localhost ~]# ps aux |awk 'NR>1{print $1,$3}'
awk取最后列   NF是最后的列
[root@localhost ~]# echo 1 a b c zhx 889 |awk '{print $NF}'
889
[root@localhost ~]# echo 1 a b c zhx 889 |awk '{print $NF-1}'
888
[root@localhost ~]# echo 1 a b c zhx 889 |awk '{print $(NF-1)}'
zhx
ps 不输出每一列的标题    --no-heading 不显示标题
[root@localhost ~]# ps --no-heading axo user,%cpu,stat
ps 命令过滤所有
[root@localhost ~]# ps axo  user,%cpu,%mem,command
USER     %CPU %MEM COMMAND
ps 过滤指定的进程
-o  指定输出  
[root@localhost ~]# ps -o pid,%cpu,%mem,command -C crond
   PID %CPU %MEM COMMAND
   959  0.0  0.0 /usr/sbin/crond -n

取出进程中使用率最高的前几名

[root@localhost ~]# ps --no-heading aux |sort -rnk4
取前五名
[root@localhost ~]# ps --no-heading aux |sort -rnk4 |head -5
[root@localhost ~]# ps aux --sort=%mem|head -5
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          2  0.0  0.0      0     0 ?        S    10月10   0:00 [kthreadd]
root          4  0.0  0.0      0     0 ?        S<   10月10   0:00 [kworker/0:0H]
root          6  0.0  0.0      0     0 ?        S    10月10   0:06 [ksoftirqd/0]
root          7  0.0  0.0      0     0 ?        S    10月10   0:00 [migration/0]
[root@localhost ~]# ps --no-heading  aux --sort=%mem|head -5
root          2  0.0  0.0      0     0 ?        S    10月10   0:00 [kthreadd]
root          4  0.0  0.0      0     0 ?        S<   10月10   0:00 [kworker/0:0H]
root          6  0.0  0.0      0     0 ?        S    10月10   0:06 [ksoftirqd/0]
root          7  0.0  0.0      0     0 ?        S    10月10   0:00 [migration/0]
root          8  0.0  0.0      0     0 ?        S    10月10   0:00 [rcu_bh]

top命令的快捷键

top的命令默认三秒种刷新一次,按空格键瞬间刷新一次
按键q  退出
P 默认情况下是使用%CPU使用率进行排序
M 是按照内存使用率进行排序
top进入输入z键进入颜色模式,按x标记当前是按照哪列进行排序。
shift + >向右
shift + <向左

top命令的升级版htop命令

按q 退出  哪里不会点击哪里
htop 命令是epel源中的命令,没有配置epel源安装。

在这里插入图片描述
top命令是交互式的
如果取出第三行,光标会卡在不动需要按q退出,这种还不方便取出,需要非交互式的取出
在这里插入图片描述

top的选项参数:
-b  命令行模式
-n 显示几次刷新结果,默认是显示3秒刷新一次
[root@localhost ~]# top -b n1 |awk 'NR==3'
%Cpu(s):  0.0 us, 11.8 sy,  0.0 ni, 88.2 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
[root@localhost ~]# top -bn1 |awk 'NR==3'
%Cpu(s):  0.0 us, 11.8 sy,  0.0 ni, 88.2 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值