Linux学习-进程管理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux学习-进程管理相关的知识,希望对你有一定的参考价值。




目录

  • 父进程与子进程

  • 服务

  • 工作管理(& | jobs | fg | bg | kill)

  • ps命令

  • Priority和nice优先级


父进程与子进程


子进程是父进程衍生出来的程序。举个大家经常使用的例子,我们每次登陆的shell,会触发一个进程,我们都是在这个shell下输入命令进行工作的,其实呢,你输入的命令也会触发一个新的进程,这个新的进程就是子进程,而一开始登陆的shell进程则为父进程。我们做一个小实验,我们在当前登陆shell下再登陆一个新的shell,然后输入一个命令,查看进程的状态信息

技术分享图片

PID是该进程的识别码,PPID是父进程的识别码。我们发现第一个bash的PID和第二个bash的PPID都是2446,ping命令的PPID和第二个bash的PID都是2660,说明bash下输入的命令都是当前bash的进程所产生的嘛。


服务(常驻内存)


在系统引导过程中就启动的进程,我们称之为守护进程,也叫服务,并且这类进程会持续的进行,提供系统和网络所必须的功能。



工作管理


通常在当前bash下执行一个任务,必须等待这个任务执行完毕后才能输入命令执行下一个任务,现在我们要进行文档复制、资料查询、软件安装等等多个任务同时工作,这就要用到工作管理的知识。


将任务转到后台(&)

直接在执行任务的命令后边加&,然后我们可以输入命令执行另一个任务从而实现多任务执行。例如,我们将/etc下的文件和目录进行备份,同时不需要等待

[[email protected] ~]# tar -zpc -f /app/etc.tar.gz /etc/* &
[1] 2948    # 2948代表PID
[[email protected] ~]# tar: Removing leading `/' from member names
# 一段时间之后,出现如下信息代表该任务完成
[1]+  Done                    tar -zpc -f /app/etc.tar.gz /etc/*

这里会有一个问题,如果对于那些会有显示结果的命令,例如ping命令,使用&之后,终端会一直显示ping命令的返回结果,这时候因为已经是后台进程,用ctrl+c也不起作用,我们怎么办呢,我们可以用数据重定向,例如:

ping 172.18.0.1 > /tmp/txt 2>&1 &


查看后台工作状态(jobs)

如果想知道有多少进程在后台工作,可以利用jobs命令查看,下图为我的系统现在后台工作的进程,显示结果表示了后天进程的工作状态等信息,注意前边的+ -号,他们具有一定的含义,他们代表fg取用的顺序。

技术分享图片

jobs -l  # 列出后台进程的详细信息,包括PID

     -r  # 仅列出正在运行的后台进程

     -s  # 仅列出暂停的后台进程


将后台进程转为前台进程(fg)

我们想让后台进程转到前台来运行,可以使用fg命令。

fg          # 默认将jobs命令显示结果中带 + 的转到前台

      -     # 将带 - 的转到前台

     %NUM   # 将jobs显示结果中指定的数字的进程转到前台  


后台进程Stopped转为Running(bg)

下图中,我输入命令 /bin/ping 172.18.0.1 > /tmp/txt ,回车之后按下ctrl+z暂停该命令, ping命令的进程处于Stopped状态,使用bg之后,变为Running状态。

技术分享图片

bg          # 针对默认将jobs命令显示结果中带 + 的进程

      -     # 针对带 - 的进程

     %NUM   # 针对jobs显示结果中指定的数字的进程 


杀死后台进程(kill)

kill命令直接将后台进程粗暴地终止移除,不够这个命令有点特别,需要指定讯号来进行处理,我们先来看一下kill命令的用法:

kill -l    # 查看能够使用的signal,之后可以man 7 signal查看具体的效果

kill -signal %NUM | PID    # kill命令的格式,%NUM为jobs命令显示结果中的第一列数字

先介绍几种常用的signal

kill -1    # 重新读取一次配置参数的文件 

kill -2    # 等同于ctrl+c

kill -9    # 强制删除一个进程,例如,对于vim编辑文件file,不会主动删除.file.swp

kill -15   # 正常终止一个进程,例如,对于vim,主动删除.file.swp



ps命令


ps    显示进程的运行状况

ps -l    # 仅显示当前bash下的进程状况

ps -lA   # 显示系统所有进程的信息,每一列字段代表的意义如下

F
进程的旗标(flag),为总结权限,4代表权限为root,1代表该子程序仅进行了复制
S运行状态(stat),R=>运行,S=>睡眠,D=>堵塞,T=>停止状态,Z=>僵尸状态,已经终止但是无法移除内存
UID/PID/PPID进程的发起人/进程号/父进程号
C
CPU使用率,单位百分比
PRI/NI
priority/nice优先级
ADDR/SZ/WCHAN
ADDR代表进程在内存的那个部分,代表正在运行状态;SZ代表进程所占内存大小;WCHAN代表进程是否在运行,- 表示正在运行
TTY
登陆者的终端机位置,若为远程登录则为pts/n
TIME
CPU运行该进程所费的时间
CMD该进程是什么指令触发的


ps aux    # 不带-,显示系统所有的进程信息,每一列字段代表的意义如下

USER
进程的发起人
PID
进程号
%CPU
进程占用CPU百分比
%MEM进程占用物理内存百分比
VSZ/RSS
进程占用虚拟内存的大小/进程占用的固定内存的大小,可以理解为页的数量
TTY

控制终端的ID,?代表与终端无关的进程,tty1-tty6为本机登录终端,pts/n为远程登录终端

STAT进程状态
START/TIME进程启动的时间/进程实际占用CPU的时间
COMMAND
触发进程的指令,如果后边跟了<defunct>,表示这是一个僵尸进程


ps axjf    # 同样不带 - ,进程之间具有相关性,该命令可以用类似程序树的形式显示进程信息


技术分享图片

看图中一段的显示内容,我们可以看出,当前我是用sshd提供远程网络服务远程登录主机,该程序(父进程)提供一个bash环境(子进程),我在这个bash环境(父进程)下输入命令ps axjf触发了一个新的进程(子进程)



Priority和nice优先


技术分享图片

linux会给予进程一个执行优先级priority(PRI),值越低优先级越高,PRI是系统核心动态控制调整,用户无法进行更改,那么我们如果想调整进程的优先级,而PRI又不能调整,我们引进了nice(NI)来使得用户可以手动修改进程的运行优先级别。

nice值的取值范围为-20--19,但是nice值的调整对用户也有限制,root可以随意调整自己和其他用户的nice值普通用户只能调整自己的nece值,并且调整范围为0--19,防止nice为负值时抢占资源,同时nice值只能越调越高,不能降低nice值,PRI和NI具有一定的相关性:

PRI(new)=PRI(old)+NI

需要注意的是,从关系式来看,虽然NI可以影响进程的优先级,但是进程的优先级最终还要经过系统核心决定,所有我们不能简单的理解PRI+NI。


nice    # 对新建立的进程设定nice值


格式:nice -n NUM COMMAND     # NUM范围为-20--19

我们对vim命令设置nice值为5,原本预设的PRI值为bash的PRI(80),现在变为了85

技术分享图片


renice    # 重新调整已存在进程的nice值


格式:renice NUM PID    # NUM范围为-20--19,如果超出这个范围,则自动调整为最近的-20或19

先查看进程bash的PRI和NI等信息,然后输入renice命令修改bash进程的NI,修改完之后发现PRI和NI发生变化,同时我们也发现子进程也继承了父进程的PRI和NI。

技术分享图片



以上是关于Linux学习-进程管理的主要内容,如果未能解决你的问题,请参考以下文章

linux的学习系列 8---进程管理

学习笔记

linux学习9-进程管理知识

shell学习四十九天----进程建立

linux学习课程从入门到精通:Centos8-系统进程管理

Linux进程管理学习资料