Linux进程管理

一、Linux程序与进程

程序是一组指令及参数的集合,按照既定的逻辑控制计算机运行来完成特定任务。

进程则是运行着的程序,是操作系统执行的基本单位,是程序运行的过程

  • 从用户的角度来看进程是程序的一次动态执行过程
  • 从操作系统的核心来看,进程是操作系统分配内存、CPU时间片等资源的基本单位
  • 进程是资源分配的最小单位
  • 每一个进程都有自己独立的地址空间与执行状态

程序和进程的区别

(1)程序是静态的,它只是一组指令的集合不具有任何的运行意义。而进程是程序运行的动态过程
(2)进程和程序并不是一 一对应的关系,相同的程序运行在不同的数据集上就是不同的进程
(3)进程还具有并发性和交互性,而程序却是封闭的

进程和线程的区别

(1)一个进程可以拥有多个线程,而一个线程同时只能被一个进程所拥有
(2)线程不能单独执行,但是每一个线程都有程序的入口、执行序列以及程序出口,它必须组成进程才能被执行

二、Linux父进程与子进程

父进程复制自己的地址空间创建一个新的子进程结构。每个新进程分配一个唯一的进程ID(PID),满足跟踪安全性之需。PID和父进程ID(PPID)是子进程环境的元素,任何进程都可以创建子进程,所有进程都是第一个系统进程的后代:
CentOS6:init
CentOS7:systend
子进程继承父进程的安全性身份、过去和当前的文件描述符、端口和资源特权、环境变量以及程序代码。随后,子进程可能exec自己的程序代码。通常,父进程在子进程运行期间处于睡眠(sleeping)状态。当子进程完成时发出(exit)信号请求,在退出时,子进程已经关闭或丢弃了其资源环境,剩余的部分称之为僵停(僵尸)。父进程在子进程退出时收到信号而被唤醒,清理剩余的结构,然后继续执行其自己的程序代码。

三、进程管理工具

3.1 pstree:
用于查看进程树之间的关系。即哪个是父进程,哪个是子进程,可以清楚的看出来是谁创建了谁

-A:各进程树之间的连接以ASCII码字符来连接
-U:各进程树之间的连接以utf8字符来连接,某些终端可能会有错误
-p:同时列出每个进程的PID
-u:同时列出每个进程的所属账号名称

[root@localhost ~]# yum install psmisc -y ##安装pstree命令

[root@localhost ~]# pstree ##CentOS6

init─┬─atd
├─auditd───{auditd}
├─crond
├─login───bash
├─master─┬─pickup
│ └─qmgr
├─5*[mingetty]
├─rsyslogd───3*[{rsyslogd}]
├─sshd─┬─sshd───bash───pstree
│ └─sshd───sftp-server
└─udevd───2*[udevd]

[root@localhost ~]# pstree ##CentOS7

systemd─┬─NetworkManager─┬─dhclient
│ └─2*[{NetworkManager}]
├─VGAuthService
├─auditd───{auditd}
├─crond
├─dbus-daemon───{dbus-daemon}
├─firewalld───{firewalld}
├─login───bash
├─lvmetad
├─master─┬─pickup
│ └─qmgr
├─polkitd───5*[{polkitd}]
├─rsyslogd───2*[{rsyslogd}]
├─sshd─┬─sshd───bash───pstree
│ └─sshd───sftp-server
├─systemd-journal
├─systemd-logind
├─systemd-udevd
├─tuned───4*[{tuned}]
└─vmtoolsd───{vmtoolsd}

3.2 ps

-A:所有的进程均显示出来,与-e具有同样的效用
-a:显示现行终端机下的所有进程,包括其他用户的进程
-u:以用户为主的进程状态
x:通常与a这个参数一起使用,可列出较完整的信息

[root@localhost ~]# ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 1467 1445 0 80 0 - 27079 wait pts/0 00:00:00 bash
4 R 0 1648 1467 0 80 0 - 27034 - pts/0 00:00:00 ps

F:flag,4代表使用者为superuser
S:代表这个程序的状态(STAT)
UID:代表执行者身份
PID:进程的ID号
PPID:父进程的ID
C:CPU使用的资源百分比
PRI:进程的执行优先权,其值越小越早被执行
NI:进程是nice值,表示进程可被执行的优先级的修正数值
ADDR:内核函数,指出该程序在内存的哪个部分。若是个执行的程序,一般就是【-】
SZ:使用掉的内存大小
WCHAN:目前此程序是否正在运作当中,若为 - 表示正在运作
TTY:登入者的终端机位置
TIME:使用掉的CPU时间
CMD:所下达的指令名称

[root@localhost ~]# ps -aux
Warning: bad syntax, perhaps a bogus ‘-’? See /usr/share/doc/procps-3.2.8/FAQ
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 19232 1488 ? Ss 12:59 0:01 /sbin/init
root 2 0.0 0.0 0 0 ? S 12:59 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 12:59 0:00 [migration/]
root 4 0.0 0.0 0 0 ? S 12:59 0:00 [ksoftirqd/]
root 5 0.0 0.0 0 0 ? S 12:59 0:00 [stopper/0]
. . . . . . . . .

USER :该进程属于哪个使用者账号
PID:进程ID号
%CPU:该进程使用掉的CPU资源百分比
%MEM:该进程所占用的物理内存百分比
VSZ:该进程使用掉的虚拟内存量
RSS:该进程占用的固定的内存量
TTY:该进程是在哪个终端机上面运作,若与终端机无关,则显示?。tty1-tty6是本机上面的登入者程序,若为pts/0等等的,则表示为由网络连接进主机的程序
STAT:进程状态(R-运行;S-睡眠;T-正在侦测或者停止;Z-僵尸程序状态)
START:该进程被触发启动的时间
TIME:该进程实际使用CPU运作的时间
COMMAND:该程序的实际指令

3.3 pgrep:
通过pgrep来获得正在被调度的进程的相关信息。pgrep通过匹配其程序名,找到匹配的进程

-l:同时显示进程名和PID
-o:当匹配多个进程时,显示进程号最小的那个
-n:当匹配多个进程时,显示进程号最大的那个
在这里插入图片描述
3.4 killall与kill

(1)killall用于杀死指定名字的进程

-e:要求匹配进程名称
-I:忽略小写
-g:杀死进程组而不是进程
-i:交互模式,杀死进程前先询问用户
-l:列出所有的已知信号名称
-q:不输出警告信息
-s:发出指定的信号
-v:报告信号是否成功发送
-w:等待进程死亡

[root@localhost ~]# ps -ef |grep nginx
root 1743 1 0 15:18 ? 00:00:00 nginx: master process ./nginx
nobody 1744 1743 0 15:18 ? 00:00:00 nginx: worker process
root 1748 1467 0 15:19 pts/0 00:00:00 grep nginx

[root@localhost ~]# killall nginx ##使用killall杀死nginx进程

[root@localhost ~]# ps -ef |grep nginx
root 1751 1467 0 15:20 pts/0 00:00:00 grep nginx

(2)kill 用来杀死指定进程PID的进程

-l:信号,若不加信号的编号参数,则会列出全部的信号名称
-a:当处理当前进程时,不限制命令名和进程号的对应关系
-p:指定kill命令只打印相关进程的进程号,而不发送任何信号
-s:指定发送信号
-u:指定用户

在这里插入图片描述
HUP(1):终端断线
INT(2):中断,同ctrl+c
QUIT(3):退出,同ctrl+
TERM(15):终止
KILL(9):强制终止
CONT(18):继续
STOP(19):暂停,同ctrl+z

[root@localhost ~]# ps -ef |grep vim
root 1784 1763 0 15:34 pts/1 00:00:00 vim .txt
root 1786 1467 0 15:34 pts/0 00:00:00 grep vim

[root@localhost ~]# kill -9 1784 ##强制杀死PID为1784的进程

[root@localhost ~]# ps -ef |grep vim
root 1788 1467 0 15:35 pts/0 00:00:00 grep vim

3.5 htop
htop是top的增强版

[root@node1 yum.repos.d]# yum install epel-release -y ##首先要下载epel源

[root@node1 yum.repos.d]# ls
bak CentOS6-Base-163.repo epel.repo epel-testing.repo yum.repo
[root@node1 yum.repos.d]# yum clean all
[root@node1 yum.repos.d]# yum repolist

[root@node1 ~]# yum install htop -y ##安装htop

htop跟top一样,也是打开一个实时的监控界面,直接输入htop命令打开如下图所示界面:
在这里插入图片描述
F1:查看htop使用说明:
在这里插入图片描述
F2:htop设定:
在这里插入图片描述
F3:搜索进程:按照进程名进行搜索,会将搜索到的进程用设定的颜色标记出来,方便查看
在这里插入图片描述
F4:增量进程过滤器:相当于模糊查找,不区分大小写,如下:
在这里插入图片描述
F5:显示树形结构
在这里插入图片描述
F6:选择排序方式:按下F6后会跳转至下图页面,让你选择以什么方式排序
在这里插入图片描述
F7:可减少nice值,提高对应进程的优先级
F8:可增加nice值,降低对应进程的优先级
F9:杀死进程:选择某一进程按F9可杀死此进程
F10:结束htop

3.6 vmstat
可展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况

-V:显示vmstat版本信息
-n:只在开始时显示一次各名字段名称
-a:显示活跃和非活跃内存
-d:显示各个磁盘相关统计信息
-D:显示磁盘总体信息
-p:显示指定磁盘分区统计信息
-s:显示内存相关统计信息及多种系统活动数量
-m:显示slaninfo
-t:在输出信息的时候也将时间一起输出出来
-S:使用指定单位显示,默认为K
delay:刷新时间间隔。若不指定,只显示一条结果
count:刷新次数。若不指定刷新次数,但指定了时间间隔,这时刷新次数为无穷

[root@node1 ~]# vmstat
procs -----------memory---------- —swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 661396 11980 186532 0 0 38 50 29 31 0 0 99 0 0

r:等待执行的任务数
B:等待IO的进程数量
swpd:正在使用虚拟的内存大小,单位K
free:空闲内存大小
buff:已用的buff大小,对块设备的读写进行缓冲
cache:已用的cache大小,文件系统的cache
nact:非活跃内存大小,即被标明可回收的内存,区别于free和active
active:活跃的内存大小
si:每秒从交换区写入内存的单位(kb/s)
so:每秒从内存写到交换区的大小
bi:每秒读取的块数(读磁盘)
bo:每秒写入的块数(写磁盘)
in:每秒中断数,包括时钟中断
cs:每秒上下文切换数
Us:用户进程执行消耗CPU时间
Sy:系统进程消耗CPU时间
ld:空闲时间,包括IO等待时间
wa:等待IO时间

3.7 lsof
是一个列出当前系统打开文件的工具,因为lsof需要访问核心内存和各种文件,所以必须以root用户身份运行它才能够充分发挥其功能

lsof abc.txt :显示开启文件abc.txt的进程
lsof -c abc :显示出以字母abc开头进程现在打开的文件
lsof -p 1234 :列出进程号为1234的进程所打开的文件
lsof -g gname/gid :显示归属gname或gid的进程情况
lsof -u uname/uid :显示归属uname或uid的进程情况
lsof +d /usr/local :显示目录下被进程开启的文件
lsof +D /usr/local :同上,但是会搜索目录下的目录
lsof -d 4 :显示使用fd为4的进程
lsof -i :用以显示符合条件的进程情况

[root@localhost ~]# lsof -p 572 ##列出进程号为572的进程所打开的文件

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
xfs-log/s 572 root cwd DIR 253,0 224 64 /
xfs-log/s 572 root rtd DIR 253,0 224 64 /
xfs-log/s 572 root txt unknown /proc/572/exe

在这里插入图片描述

四、进程优先级

进程优先级划分【0-139】:
【0-99】有效实时的优先级
【100-139】:非有效实时优先级------调整 nice 【-20,19】

0---------139
<------------优先级越高
-20------------19
<------------优先级越高

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值