走进Linux服务器之一:Linux操作基础7——Linux进程管理

前言

之前我们在文章中讨论了关于用户的权限等相关的知识,现在我们来讨论关于进程管理等相关的知识,实现运用指令来查看、删除或对进程进行其他相关的操作。

一、进程管理

1.静态查看进程(ps)

ps指令就是指process status,即为进程状态管理器。

在终端中利用ps指令来查看进程,就好比Windows下的任务管理器。

我们可以在终端里输入:

ps aux

可以产看到目前所有的进程和其相关的信息,我们可以用管道,利用head只看前两行:

ps aux | head -2
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.2  0.3 128500  7160 ?        Ss   14:22   0:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 22

我们可以看到这个进程ID(PID)为1号的进程的用户,进程ID,CPU占用率,内存占用率,虚拟内存占用大小,物理内存占用大小,占用终端编号,进程状态,开始时间,占用CPU时间和进程的位置。

USERPID%CPU%MEMVSZRSSTTYSTATSTARTTIMECOMMAND
拥有者pidCPU占用率内存占用率虚拟内存占用大小物理内存占用大小终端的次要装置号码进程的状态进程开始时间执行的时间所执行的指令

linux的进程有5种状态:

D 不可中断 uninterruptible sleep (usually IO)

R 运行 runnable (on run queue)

S 中断 sleeping

T 停止 traced or stopped

Z 僵死 a defunct (”zombie”) process

这里我们用了ps的三个可选选项,a,u,x, ps的一些选项如下:

  1. ps a 显示现行终端机下的所有程序,包括其他用户的程序。
    2)ps -A 显示所有程序。
    3)ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。
    4)ps -e 此参数的效果和指定"A"参数相同。
    5)ps e 列出程序时,显示每个程序所使用的环境变量。
    6)ps f 用ASCII字符显示树状结构,表达程序间的相互关系。
    7)ps -H 显示树状结构,表示程序间的相互关系。
    8)ps -N 显示所有的程序,除了执行ps指令终端机下的程序之外。
    9)ps s 采用程序信号的格式显示程序状况。
    10)ps S 列出程序时,包括已中断的子程序资料。
    11)ps -t  指定终端机编号,并列出属于该终端机的程序的状况。
    12)ps u  以用户为主的格式来显示程序状况。
    13)ps x  显示所有程序,不以终端机来区分。

我们可以用 --sort来对ps指令输出的所有结果进行关键字排序。在 --sort后面加上要排序的关键字以及排序的方向(升序还是降序)

如:

ps aux --sort -%cpu

这个指令要求将ps aux 指令的所有结果以CPU占用率的降序排序。

我们可以自定义ps指令的输出

如果我们只想看每一个进程的PID,PPID以及内存占用率等,可以用 axo来进行自定义输出:

ps axo user,pid,ppid,%mem,command | head -3
USER        PID   PPID %MEM COMMAND
root          1      0  0.3 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root          2      0  0.0 [kthreadd]

如上,我们只令其输出了所属的用户,进程ID,父进程ID,内存占用率以及命令的位置。

2.动态产看进程(top)

我们可以用top指令来进行对所有进程的动态实时查看:

top

我们可以把top的输出分为两大部分。

首先是上半部分,上半部分是计算机的整体性能,下半部分就是进程的列表。

top输出的上半部分一般有五行,大致如下:

top - 14:58:44 up 19 min,  2 users,  load average: 0.00, 0.03, 0.05
Tasks: 202 total,   1 running, 201 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  6.2 sy,  0.0 ni, 93.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  2027868 total,   394584 free,   775152 used,   858132 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.  1061996 avail Mem 

第一行:

top - 14:58:44 up 19 min, 2 users, load average: 0.00, 0.03, 0.05

程序名-系统时间 up 运行时间 登陆用户数,CPU负载: 5min,10min,15min (分别表示在5分钟,10分钟,15分钟之内,CPU的占用率为多少)

第二行:

Tasks: 202 total, 1 running, 201 sleeping, 0 stopped, 0 zombie

进程总数:202 运行数1 休眠数201 停止数0 僵死数0

第三行:

%Cpu(s): 0.0 us, 6.2 sy, 0.0 ni, 93.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st

CPU使用占比 us用户 sy系统 ni优先级 id空闲 wa等待 hi硬件 si软件 st虚拟机

第四行:

KiB Mem : 2027868 total, 394584 free, 775152 used, 858132 buff/cache

物理内存K total总共2G free空闲385M used使用756M cache缓存硬盘内容838M

第五行:

KiB Swap: 2097148 total, 2097148 free, 0 used. 1061996 avail Mem

交换分区K(大致同第四行)

接下来我们看一下top输出的下半部分

首先看一下表头,表头包含如下信息:

PIDUSERPRNIVIRTRESSHRS%CPU%MEMTIME+COMMAND
进程ID用户优先级优先级申请内存实际占有内存共享内存进程状态CPU占用率内存占用率运行时间命令位置

​ top内部有一些常用的指令:

h|?帮助

M 按内存的使用排序

P 按CPU的使用排序

N 以PID的大小排序

<向前 >向后

z彩色,Z设置彩色,使用数字进行调整。

top的一些使用小技巧:

top	#回车,立即刷新。按z彩色显示,按F,通过光标设置
top -d 1 #每隔一秒钟进行刷新
top -d 1 -p 10126 #查看指定进程的动态信息
top -d 1 -p 10126,1 #查看10126和1号进程

3.使用信号量控制进程(kill)

我们可以给进程发送信号,来控制进程进行相应的操作,我们可以在shell中查看所有支持的信号量:

kill -l #列出所有支持的信号

部分信号量的作用如下:

  1. SIGHUP

重新加载配置

  1. SIGINT

键盘中断Ctrl+C

  1. SIGQUIT

键盘推出Ctrl+\ 类似SIGINIT

  1. SIGKILL

强制终止,无条件

  1. SIGTERM

终止(正常结束),缺省信号,如果只用kill指令,那么默认发送这个信号

  1. SIGCONT

继续

  1. SIGSTOP

暂停

  1. SIGTSTP

键盘暂停Ctrl+Z

我们可以用 kill -num pid 这样的格式给进程号为pid的进程发送编号为num的信号,比如强制杀死进程10100:

kill -9 10100

4.进程优先级(nice、PR)

nice在linux系统中代表进程的优先级概念。linux进程调度及多任务。 每个CPU在一个时间点上只能处理一个进程,通过时间片技术,来同时运行多个任务。

nice决定了一个进程能够获得CPU时间的多少。nice即为在top下半部分输出中的NI一列。

nice的数值从 -20到 +19,-20的优先级最高, +19的优先级最低。总共有40个数字。

PR(+20):将nice级别显示为映射到更大的优先级队列,-20映射为0,+19映射为+39。

PR的优先级取值范围为-99到+39,其中,0-39对应nice值的-20到+19。

在 ps aux指令中默认不显示进程的nice值,我们可以用axo选项来手动加上nice值。

比如我们想让所有进程显示进程id,进程名,nice优先级,并且按照nice的降序进行排序,可以:

ps axo pid,command,nice --sort -nice

我们可以在创建进程的时候就定义这个进程的nice优先级数值:

nice -n -5 sleep 20

在这里我们创建的sleep指令的优先级数值为-5。

我们可以通过renice命令来重新定义一个进程的nice优先级:

renice -20 18805

上面即为把进程ID为18805的进程的nice值改为-20。(对应的PR优先级值为0)

二、 作业控制 (jobs)

我们经常把一个程序成为作业,一个前台的作业将会占领终端:

sleep 20

输入上述指令之后,20s之内在终端内输入字符不会获得回应,因为在前台运行的sleep指令占用了终端。我们可以把这个作业放在后台进行:

sleep 20 &

这样就创建了一个后台的作业。我们可以通过对进程发送信号来更改这个进程的状态,这个进程不会占用终端。

我们同时可以用jobs指令来查看所有后台的作业:

jobs

同时我们可以把一个进程修改为在前台运行:

fg 10050	#把进程10050放到前台运行

当一个后台的作业停止的时候,我们可以用bg激活:

bg 10060	#把在后台停止的10060进程激活

注意!

kill 1 和 kill %1的含义不同,前者为终止PID为1的进程,后者为杀死作业序号为1的后台程序。

三、虚拟文件系统(proc)

在根目录下有一个目录叫做proc,在这里面存储的都是虚拟文件系统。

我们进入proc用ls指令查看,可以看见大量的用数字来命名的文件目录,每一个文件目录的数字就是进程号,这个目录下的文件就是对应的进程的文件。

proc里存储着进程的临时信息。虚拟文件系统采集服务器自身内核、进程运行的状态信息。

首先关于CPU:

/proc/cpuinfo

在这里存储着CPU的参数:

cat /proc/cpuinfo
processor	: 0
vendor_id	: AuthenticAMD
cpu family	: 23
model		: 113
model name	: AMD Ryzen 7 3700X 8-Core Processor
stepping	: 0
microcode	: 0x8701013
cpu MHz		: 3593.252
cache size	: 512 KB
**************************************下略********************************************

其次是关于内存:

/proc/meminfo

在这里存储着关于内存的参数:

cat /proc/meminfo
MemTotal:        2027868 kB
MemFree:          227004 kB
MemAvailable:     979900 kB
Buffers:            1080 kB
Cached:           889200 kB
SwapCached:            0 kB
Active:           788620 kB
Inactive:         609144 kB
Active(anon):     508396 kB
Inactive(anon):    40656 kB
**************************************下略********************************************

接着是内核:

/proc/cmdline

这里存储着关于内核的信息:

cat /proc/cmdline
BOOT_IMAGE=/vmlinuz-3.10.0-1160.el7.x86_64 root=/dev/mapper/centos-root ro rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet LANG=en_US.UTF-8

这里可以看到linux内核为3.10.0

总结

今天我们讨论了关于进程管理、作业管理和虚拟文件系统的相关知识,了解了ps,top指令进行对进程相关的查看,用kill指令为进程发送信号,以及进程优先级、作业的前后台管理以及虚拟文件系统相关的概念。接下来我们将会简要讨论一下关于管道和重定向相关的概念。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值