首页 > 系统相关 >Linux进程管理

Linux进程管理

时间:2023-01-03 19:25:00浏览次数:40  
标签:00 管理 0.0 64 lnh Linux 进程 root

进程管理

一、进程

名字 含义
程序 安装包,程序代码,app,存放在磁盘上面
进程 运行起来的程序,命令,服务(远程连接服务,网络服务)都可以称作进程。运行在内存中
守护进程 守护进程,一直运行的进程,也可以叫做服务

二、进程分类

1.僵尸进程 必会

由于谷中原因导致某个进程挂掉了,但是进程本身仍然存在,还占用着系统资源,这种异常进程叫做僵尸进程

查找:通过ps aux 过滤,Z状态即可找出僵尸进程或top命令查看

解决:

  • 找出僵尸进程上级进程,结束进程即可
  • 如果上级进程是主进程(pid为1的进程),则需要重启Linux系统

image

2.孤儿进程

孤儿进程指在其父进程执行完成或终止后,仍继续运行的一类进程

孤儿进程会被系统直接接管(systemd进程)

image

3.僵尸进程演示

#通过gcc生成僵尸进程的命令文件  E:\lnh\笔记\老师笔记\软件包\zombine.c
[root@lnh ~]# gcc zombine.c -o zombine
[root@lnh ~]# ll
total 16
-rwxr-xr-x 1 root root 8648 Dec 15 10:04 zombine
-rw-r--r-- 1 root root  591 Dec 15 09:56 zombine.c

#在另一个窗口运行僵尸进程
[root@lnh ~]# ./zombine 
I am parent,2386
sleep....
I am child,2387
Child exits


#top命令查看是否有僵尸进程
[root@lnh ~]# top
top - 15:31:06 up  6:48,  2 users,  load average: 0.00, 0.01, 0.05
Tasks: 103 total,   1 running, 101 sleeping,   0 stopped,   1 zombie  #显示有一个僵尸进程

#过滤出僵尸进程
[root@lnh ~]# ps aux |grep Z
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root       2387  0.0  0.0      0     0 pts/1    Z+   15:30   0:00 [zombine] <defunct>
root       2390  0.0  0.0 112808   948 pts/0    R+   15:31   0:00 grep --color=auto Z

#发现僵尸进程的pid是2387
#通过pstress 查看僵尸进程的父进程(也就是上级进程)
[root@lnh ~]# pstree -p |grep 2387
           |-sshd(1356)-+-sshd(1952)---bash(1954)---zombine(2386)---zombine(2387)

#直接结束僵尸进程
[root@lnh ~]# kill 2387
[root@lnh ~]# top
top - 15:33:24 up  6:51,  2 users,  load average: 0.00, 0.01, 0.05
Tasks: 104 total,   1 running, 102 sleeping,   0 stopped,   1 zombie
#发现僵尸进程还在

#结束僵尸进程的父进程
[root@lnh ~]# kill 2386
[root@lnh ~]# top
top - 15:34:02 up  6:51,  2 users,  load average: 0.00, 0.01, 0.05
Tasks: 102 total,   1 running, 101 sleeping,   0 stopped,   0 zombie
#发现僵尸进程没有了

提示: pstree属于psmisc软件包,yum安装psmisc即可

三、进程监控指令 必会

监控命令 含义
ps 静态:ps 查看当时瞬间进程状态,一般用于临时检查或取值
top 动态:top动态,交互,整体查看系统状态,负载,僵尸进程,cpu,内存

1.ps命令格式

1.1 ps -ef

[root@lnh ~]# ps -ef
UID  PID PPID C STIME TTY TIME     CMD
root 1    0   0 08:42 ?   00:00:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2    0   0 08:42 ?   00:00:00 [kthreadd]
root 4    2   0 08:42 ?   00:00:00 [kworker/0:0H]
root 5    2   0 08:42 ?   00:00:00 [kworker/u256:0]

UID: 进程属于用户
PID: 进程id号,大部分是随机
PPID:父进程的id号,pstree -p 查看详细关系
CMD: 进程名字

1.2 ps aux

[root@lnh ~]# ps aux
USER  PID %CPU %MEM    VSZ   RSS TTY  STAT START   TIME COMMAND
root    1  0.0  0.2 125772  4256 ?    Ss   08:42   0:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root    2  0.0  0.0      0     0 ?    S    08:42   0:00 [kthreadd]
root    4  0.0  0.0      0     0 ?    S<   08:42   0:00 [kworker/0:0H]
root    5  0.0  0.0      0     0 ?    S    08:42   0:00 [kworker/u256:0]

列名 说明
第1列:User 进程属于用户
第2列:PID 进程号(子进程号)
第3列:%CPU cpu使用率
第4列:%MEM 内存使用率
第5列:VSZ 进程占用虚拟内存大小(KB)
第6列:RSS 进程占用物理内存大小(KB)
第7列:TTY 用户使用终端(用户连接进来后,系统创建)
第8列:STAT 进程状态
第9列:START 进程启动时间
第10列:TIME 进程占用cpu时间
第11列及最后:COMMAND 进程名字(命令。选项)
[ ]括起来的是内核进程,其他的是系统进程。systemd pid是1是第1个进程

image

1.3 进程状态

进程状态:进程运行中,僵尸进程,正在进行io的进程,前台或后台运行进程

组成:基本状态+附加状态

STAT基本状态 描述
R(running) 进程运行
S 可中断进程(可以随时停止)
T(terminate) 进程被暂停(挂起) ctrl+z
D 不可中断进程(进程正在进行IO读写)
Z(zombie) 僵尸进程,异常的进程
STAT 附加状态 了解 描述
s 进程是控制进程,Ss进程的领导者,父进程/主进程
< 进程运行在高优先级上,S<优先级较高的进程
N 进程运行在低优先级上,SN优先级较低的进程
+ 当前进程运行在前台,R+ 表示进程在前台运行
l 进程是多线程的,Sl表示进程以线程的方式运行(与程序)
使用多线程可以让服务或软件支持更改的访问,但是需要软件支持

2.top命令格式

top - 15:06:53 up 23:05,  2 users,  load average: 0.00, 0.01, 0.05
	  #当前时间 #开机多久   #登陆用户    #平均负载信息	 1分钟   5分钟   15分钟
Tasks: 102 total,   1 running, 100 sleeping,   1 stopped,   0 zombie
	  #共102个进程    1个在运行   100个在休眠      1个挂起      0个僵尸  
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
	#用户CPU		 系统CPU   高优先级   空闲进程   IO等待	  硬中断   软中断     虚拟机
KiB Mem :  2027868 total,  1187728 free,   240148 used,   599992 buff/cache
    #         总计内存       可用内存           已用内存          缓存占用内存
KiB Swap:  2097148 total,  2097148 free,        0 used.  1612744 avail Mem 
	#        总计swap        可用swap           已用swap          当前可用内存
   PID    USER      PR  NI    VIRT    RES    SHR         S       %CPU   %MEM     TIME+ COMMAND  
#子进程id  用户        优先级      VSZ,RSS     占用共享内存 进程状态  cpu占用 内存占用  时间+命令

image

3.案例

3.1 过滤出crond进程信息 必会

[root@lnh ~]# ps -ef |grep crond
root       1093      1  0 08:42 ?        00:00:00 /usr/sbin/crond -n
root       2456   2365  0 16:39 pts/0    00:00:00 grep --color=auto crond
[root@lnh ~]# ps aux |grep crond
root       1093  0.0  0.0 126384  1604 ?        Ss   08:42   0:00 /usr/sbin/crond -n
root       2458  0.0  0.0 112808   964 pts/0    R+   16:39   0:00 grep --color=auto crond

#过滤的结果可以通过grep -v grep 排除下grep命令自己(进程)
[root@lnh ~]# ps aux |grep crond |grep -v grep
root       1093  0.0  0.0 126384  1604 ?        Ss   08:42   0:00 /usr/sbin/crond -n

#与wc配合使用统计进程数量。
[root@lnh ~]# ps aux |grep crond |grep -v grep|wc -l
1

3.2 按照树形结构查看进程信息 必会

[root@lnh ~]# pstree
systemd─┬─NetworkManager───2*[{NetworkManager}]
        ├─VGAuthService
        ├─abrt-watch-log
        ├─abrtd
        ├─agetty
        ├─auditd───{auditd}
        ├─chronyd
        ├─crond
        ├─dbus-daemon
        ├─lvmetad
        ├─master─┬─pickup
        │        └─qmgr
        ├─polkitd───6*[{polkitd}]
        ├─rsyslogd───2*[{rsyslogd}]
        ├─sshd─┬─sshd───bash
        │      └─sshd───bash───pstree
[root@lnh ~]# pstree -p                  #显示树形结构并输出pid
systemd(1)─┬─NetworkManager(1086)─┬─{NetworkManager}(1142)
           │                      └─{NetworkManager}(1144)
           ├─VGAuthService(1051)
           ├─abrt-watch-log(1060)
           ├─abrtd(1054)
           ├─agetty(1365)
           ├─auditd(979)───{auditd}(981)
           ├─chronyd(1072)
           ├─crond(1093)
           ├─dbus-daemon(1061)
           ├─lvmetad(508)
           ├─master(1454)─┬─pickup(2352)
           │              └─qmgr(1459)
           ├─polkitd(1050)─┬─{polkitd}(1084)
           │               ├─{polkitd}(1090)
           │               ├─{polkitd}(1092)
           │               ├─{polkitd}(1094)
           │               ├─{polkitd}(1102)
           │               └─{polkitd}(1106)
           ├─rsyslogd(1358)─┬─{rsyslogd}(1379)
           │                └─{rsyslogd}(1380)
           ├─sshd(1356)─┬─sshd(1952)───bash(1954)
           │            └─sshd(2363)───bash(2365)───pstree(2472)

3.3 根据要求,只显示某些内容 必会

#通过awk取列
[root@lnh ~]# ps aux|awk '{print $1}'|head -5
USER
root
root
root
root
[root@lnh ~]# ps aux|awk '{print $1,$3}'|head -5
USER %CPU
root 0.0
root 0.0

#ps命令的选项,输出指定的内容
[root@lnh ~]# ps axo user,%cpu,stat,cmd|head -5
USER     %CPU STAT CMD
root      0.0 Ss   /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root      0.0 S    [kthreadd]
root      0.0 S<   [kworker/0:0H]
root      0.0 S    [kworker/u256:0]

#ps不输出每一列的标题
[root@lnh ~]# ps --no-heading axo user,%cpu,stat,cmd|head -5
root      0.0 Ss   /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root      0.0 S    [kthreadd]
root      0.0 S<   [kworker/0:0H]
root      0.0 S    [kworker/u256:0]
root      0.0 S    [ksoftirqd/0]

3.4 取出某一个服务(crond)的进程信息(pid,%cpu,%mem,command)

[root@lnh ~]# ps aux|grep 'crond' |awk '{print $2,$3,$4,$11}'
1093 0.0 0.0 /usr/sbin/crond

#完全使用ps命令过滤出来
[root@lnh ~]# ps -no-heading  -o pid,%cpu,%mem,command  -C crond
   PID %CPU %MEM COMMAND
  1093  0.0  0.0 /usr/sbin/crond -n

-no-heading  不显示标题
-o           输出指定列
-C           过滤,注意不要加上ax

补充

awk最后的列

[root@lnh ~]# echo 1 2 3 4 |awk '{print $NF}'
4
[root@lnh ~]# echo 1 2 3 4 |awk '{print $(NF-1)}'
3
[root@lnh ~]# echo 1 2 3 4 |awk '{print $NF-2}'
2

3.5 取出所有进程中内存使用率最高的前5

[root@lnh ~]# ps aux|sort -rnk4 |head -5
root       1414  0.0  1.8 489908 37356 ?        Sl   08:42   0:19 /usr/local/teleport/bin/tp_web start
root       1355  0.0  0.9 574280 19484 ?        Ssl  08:42   0:03 /usr/bin/python2 -Es /usr/sbin/tuned -l -P
root       1086  0.0  0.5 474352 10844 ?        Ssl  08:42   0:00 /usr/sbin/NetworkManager --no-daemon
polkitd    1050  0.0  0.5 612232 11096 ?        Ssl  08:42   0:00 /usr/lib/polkit-1/polkitd --no-debug
root       2363  0.0  0.3 161508  6084 ?        Ss   15:30   0:00 sshd: root@pts/0

[root@lnh ~]# ps aux --sort=-%mem |head -5
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root       1414  0.0  1.8 489908 37356 ?        Sl   08:42   0:19 /usr/local/teleport/bin/tp_web start
root       1355  0.0  0.9 574280 19484 ?        Ssl  08:42   0:03 /usr/bin/python2 -Es /usr/sbin/tuned -l -P
polkitd    1050  0.0  0.5 612232 11096 ?        Ssl  08:42   0:00 /usr/lib/polkit-1/polkitd --no-debug
root       1086  0.0  0.5 474352 10844 ?        Ssl  08:42   0:00 /usr/sbin/NetworkManager --no-daemon

#默认是升序排序,指标前面加上-号表示降序排序

3.6 top基础使用与快捷键 必会

#基础必会用法
q 退出
默认3秒刷新1次, 空格立刻刷新.
P 默认按照CPU使用率排序
M 按照内存使用率排序

#进阶用法:
top输入z进入颜色模式 按 x 标记出当前是按照哪列排序.
shift + > 向右
shift + < 向左

#top命令升级,支持鼠标操作htop
#htop是epel中的命令

3.7 非交互模式

#未来想获取top命令的结果,指标,需要让top运行在非交互模式
[root@lnh ~]# top -bn1 |awk 'NR==2'
Tasks: 101 total,   1 running, 100 sleeping,   0 stopped,   0 zombie

-b 非交互模式
-n 只输出1次结果

[root@lnh ~]# top -bn1 |awk 'NR==2{print $(NF-1),$NF}'
0 zombie

四、后台管理

前台(前台运行):需要连接后进行运行或操作,连接断开这个命令,操作就自动结束

后台(后台运行):让软件进入系统的后台,持续运行,一般情况下连接断开了也不会影响软件运行

软件后台运行方法 说明 应用场景
命令 & 常用的后台运行方法 大部分时候使用这个
nohup 命令 & 会记录输出到文件中默认交nohup.out 如果过想记录输出则可以用这个方法
先运行命令,然后按ctrl +z (后台挂起),
bg恢复
软件进入后台运行 顽固软件ctrl+c无法结束,可以通过这个方法结束它
screen命令 通过软件创建控件,让命令在这个空间运行 稳定性比&,nohup高

1.&方法 必会

#让sleep 999命令后台运行
[root@lnh ~]# sleep 999 &
[1] 4409
[root@lnh ~]# ps aux| grep 4409
root       4409  0.0  0.0 108052   356 pts/1    S    18:32   0:00 sleep 999
root       4411  0.0  0.0 112808   960 pts/1    R+   18:32   0:00 grep --color=auto 4409

[1] 4409
[1]  表示手动进入到后台运行的第1个进程
4409 表示进程pid

jobs可以查看手动进入后台的进程
[root@lnh ~]# jobs
[1]+  Running                 sleep 999 &

2. nohup 命令 &方法

可以保留输出到指定文件中,默认是nohup文件。

#让ping baidu.com命令后台运行并记录输出
[root@lnh ~]# nohup ping -c20 baidu.com  &
[2] 4412
[root@lnh ~]# nohup: ignoring input and appending output to ‘nohup.out’

[root@lnh ~]# cat nohup.out 
PING 10.0.0.200 (10.0.0.200) 56(84) bytes of data.
64 bytes from 10.0.0.200: icmp_seq=1 ttl=64 time=0.081 ms
64 bytes from 10.0.0.200: icmp_seq=2 ttl=64 time=0.051 ms
64 bytes from 10.0.0.200: icmp_seq=3 ttl=64 time=0.046 ms
64 bytes from 10.0.0.200: icmp_seq=4 ttl=64 time=0.047 ms
64 bytes from 10.0.0.200: icmp_seq=5 ttl=64 time=0.025 ms
64 bytes from 10.0.0.200: icmp_seq=6 ttl=64 time=0.046 ms
64 bytes from 10.0.0.200: icmp_seq=7 ttl=64 time=0.034 ms
64 bytes from 10.0.0.200: icmp_seq=8 ttl=64 time=0.049 ms
64 bytes from 10.0.0.200: icmp_seq=9 ttl=64 time=0.017 ms
64 bytes from 10.0.0.200: icmp_seq=10 ttl=64 time=0.020 ms
64 bytes from 10.0.0.200: icmp_seq=11 ttl=64 time=0.047 ms
64 bytes from 10.0.0.200: icmp_seq=12 ttl=64 time=0.049 ms
64 bytes from 10.0.0.200: icmp_seq=13 ttl=64 time=0.046 ms
64 bytes from 10.0.0.200: icmp_seq=14 ttl=64 time=0.046 ms
64 bytes from 10.0.0.200: icmp_seq=15 ttl=64 time=0.046 ms
64 bytes from 10.0.0.200: icmp_seq=16 ttl=64 time=0.046 ms
64 bytes from 10.0.0.200: icmp_seq=17 ttl=64 time=0.056 ms
64 bytes from 10.0.0.200: icmp_seq=18 ttl=64 time=0.046 ms
64 bytes from 10.0.0.200: icmp_seq=19 ttl=64 time=0.048 ms
64 bytes from 10.0.0.200: icmp_seq=20 ttl=64 time=0.048 ms

-c 表示次数,ping多少次

提示:

如果想输出到其他文件

nohup 命令>新的文件 &

3. ctrl+z

这个快捷键不是撤销,这个快捷键在linux下面表示让当前运行的命令货服务进入后台挂起,如果转为后台运行需要在输入bg,如果是误触ctrl+z,可以通过fg让进程,命令回到前台

4.screen

一般使用&,nohup让命令,服务进入后台运行,但是可能不太稳定

这时候可以通过screen命令较为稳定的后台运行一些指定

原理:创建screen空间,screen命令维持,在里面运行的命令只要空间在,里面的命令就不会断(会在后台运行)

#安装screen
[root@lnh ~]# yum -y install screen

#运行screen,进入screen虚拟窗口
[root@lnh ~]# screen

[root@lnh ~]# ping baidu.com

#退出screen
ctrl+a 然后按d

#查看screen窗口
[root@lnh ~]# screen -ls
There is a screen on:
	4455.pts-1.lnh	(Detached)
1 Socket in /var/run/screen/S-root.

#恢复
[root@lnh ~]# screen -r

#彻底结束
ctrl+d

五、杀手三剑客

命令 说明
kill kill+进程pid进行结束进程,常用
pkill pkill+进程名字,模糊查找
killall killall+进程名字,精确查找

kill -9 pid 发送强制结束信号,别用kill -9结束数据库

六 、负载

1.概述

负载:load average平均负载,最近1分钟,5分钟,15分钟系统平均负载

负载:衡量系统繁忙程度指标

衡量是否繁忙:数值越接近cpu核心总数,系统的负载越高

预警:建议负载达到cpu核心总数的70%-80%

原理:

平均负载是指单位时间内,系统处于可运行状态(R,S)和不可中断状态(D)的平均进程数,也就是平均活跃进程数

负载是衡量正在运行的进程的平均数(可中断进程和不可中断进程)

2.负载高

排查流程:

  1. 通过监控软件发现系统负载高(w,lscpu查看)

  2. 判断是cpu还是io导致的负载高

    • cpu高:top 中的us(user用户占用cpu) sy(system 系统占用cpu)
      • io高:top中的wa(iowait)磁盘io导致的负载高
  3. 如果是cpu导致的,排查出那个进程导致的,pa aux 过滤出占用cpu较高的进程

    如果是io导致的,排查那个进程导致的,通过iotop -o 排查

image

标签:00,管理,0.0,64,lnh,Linux,进程,root
From: https://www.cnblogs.com/world-of-yuan/p/17013581.html

相关文章

  • Linux软件包管理
    软件包管理1.常见的安装软件方式Linux下面的软件包格式:rpm格式(红帽系列系统,Centos,麒麟系统)或deb格式(Debian,Ubuntu)安装软件方式说明应用场景yum/apt方式通过......
  • Linux三剑客日志处理系列
    三剑客日志处理系列一、特殊符号1.引号系列必会引号含义单引号所见即所得,单引号里的内容会原封不动输出双引号和单引号类似,对双引号里面的特殊符号进......
  • Linux磁盘管理
    磁盘管理1、磁盘基础1.1概述内存:临时存放,断电后丢失磁盘:永久保存1.2分类运行方式与原理详细信息机械硬盘(HDD)电机带动磁盘高速旋转,读取数据,速度可以达......
  • Linux服务管理
    服务管理1.管理命令systemctl管理服务开机自启动管理正在运行的服务旧版本的系统:Centos5.x6.x需要使用service命令#检查sshd远程连接服务状态[root@lnh~]#s......
  • Linux读取U盘内容
    查找设备sudofdisk-l创建挂载点sudomkdir/mnt/usb将存储设备进行挂载sudomount/dev/sda1/mnt/usb访问U盘内容cd/mnt/usb卸载U盘sudoumount/mnt/usb......
  • Linux切换python版本
    【前提条件】linux已经安装好多个版本的python如2.7&3.6linux为Debian系查看是否有关于Python的候选项​​update-alternatives--displaypython​​,输出​​update-a......
  • 数据管理
    oracle数据管道 CREATEORREPLACEPACKAGEpkg_tableAS TYPEnumset_tISTABLEoft_gk_test%rowtype; --定义返回类型  FUNCTIONget_gk_test(xvarchar2......
  • 阿里云 ACK One 多集群管理再升级:GitOps 多集群持续集成,统一报警管理
    作者:宇汇、壮怀ACKOne概述ACKOne是阿里云面向混合云、多集群、分布式计算等场景推出的分布式云容器平台,能够统一管理阿里云上、边缘、部署在客户数据中心以及其他云......
  • Linux中fork和exec是什么?有何区别?
    在学习任何技术的时候,很多人经常会因为搞不懂专业术语而犯愁,甚至也经常因为两个相似的专业术语摸不着头脑,比如:Linux中fork和exec。fork和exec都是和进程相关的调用,而且......
  • linux学习笔记003
    安装jdk下载地址https://www.oracle.com/java/technologies/downloads/archive/安装命令rpm-ivhjdk-8u202-linux-x64.rpm检查安装java-version卸载命令//先检......