「Linux 操作系统」进程管理命令

任务管理(job control)

执行任务管理的操作中,每个任务都是目前 bash 的子进程,即彼此之间是有相关性的。我们无法用任务管理的方式由 tty1 的环境去管理 tty2 的 bash。

要执行 bash 的任务管理需要注意:

  • 这些任务所触发的进程必须来自 shell 的子进程(只管理自己的 shell)
  • 前台:可以控制与执行命令的环境称为前台的任务
  • 后台:可以自动执行的任务,无法使用【Ctrl+c】终止,可使用 bg、fg 调用该任务
  • 后台中执行的进程不能等待 terminal 或 shel 的输入

job control 的管理

  1. 直接将命令丢到后台中执行

使用符号【&】可以将某些任务直接丢到后台环境中,让我们可以继续操作前台的任务。例如使用 tar 命令将 /etc 备份时放入后台,并利用数据流重定向将输出数据传送到某个文件中:

tar -zpcvf /tmp/etc.tar.gz /etc > /tmp/log.txt 2>&1 &
  1. 将目前任务丢到后台中暂停

使用【Ctrl+z】将目前运行的进程丢到后台中等待。例如在使用 vim 过程中按【Ctrl+z】来暂时退出到前台中。然后可以使用命令【jobs】来查看目前的后台任务状态。

jobs [-lrs]
选项与参数:
-l:除了累出 job number 与命令串,还列出 PID 号码
-r:列出正在后台 run 的任务
-s:列出正在后台 stop 的任务
  1. 将后台任务拿到前台处理

使用命令【fg】可以将后台任务拿到前台来处理

fg %jobnumber
选项与参数:
%jobnumber:jobnumber 为任务号码
  1. 让任务在后台下的状态变为运行中

【Ctrl+z】可以让目前任务丢到后台下面暂停,而命令【bg】则可以让后台暂停的任务变为运行。

bg %jobnumber
  1. 管理后台任务

使用命令【kill】可以删除后台的任务

kill -signal %jobnumber
kill -l
选项与参数:
-l:列出目前 kill 能使用的信号
signal:表示给予后面接的任务什么样的指示
-1:重读一次参数配置文件
-2:与 Ctrl+c 同样操作
-9:立即强制删除一个任务
-15:正常方式结束任务

脱机管理

任务管理中的【后台】是在终端模式下的情况,即 bash 的后台,而不是放在了系统的后台中,如果使用远程连接方式将任务以 & 的方式放在后台,在脱机的情况下该任务不会继续执行。

使用【nohup】命令可以再脱机或注销系统后,还能让任务继续执行。

nohup [命令与参数]		# 在终端前台执行
nohup [命令与参数] &		# 在终端后台执行

进程管理

Linux 系统中,触发任何一个事件时,系统都会将它定义为一个进程,并给予该进程一个 PID,同时根据触发进程的用户与相关属性关系,基于这个 PID 一组有效地权限设置。也就是说,当我们运行一个程序或命令时就可以触发一个时间而获得 PID,而不同身份的用户执行程序时,系统给予该进程的权限也不同。

  • 程序(program):通常为二进制文件,放置在存储媒介中,以物理文件的形式存在。
  • 进程(progress):程序被触发后,执行者的权限与属性、程序代码与所需数据等都被加载到内存中,操作系统给予给内存单元一个 PID。

一些常驻在内存中的进程称为服务(daemon),负责一些系统所提供的功能以服务用户的各项任务。

查看进程

查看进程可以利用静态的 ps 或是动态的 top 命令,还可以利用 pstree 来查看进程树之间的关系

  1. 显示某个时间点的进程运行情况
ps aux		# 查看系统所有的进程
ps -l		# 仅查看自己的 bash 相关进程

使用【ps -l】仅会列出与你的操作环境 bash 有关的进程,即最上层的父进程会是你自己的 bash。


如上面的 ps 进程,其父进程 PPID 则是当前 bash 的 PID。其中 F 表示进程标识,4 表示进程权限为 root,1 表示此子进程仅执行复制而没有实际执行。S 表示进程状态,R 为运行,S 为睡眠可被唤醒,D 为不可唤醒睡眠,T 为停止,Z 为将是状态,即进程已终止但无法被删除至内存外。

僵尸进程:造成僵尸进程的原因通常是该进程以及执行完毕,或应该终止了,但该进程的父进程无法完整地将该进程结束,造成该进程一直存在内存当中。如果某进程的 CMD 后面接了 <defunct> 时,就代表该进程时僵尸进程。

  1. 动态查看进程的变化

【top】命令可以持续检测进程运行的状态。

top [-d 数字] | top [-bnp]
# 选项和参数
# -d:后面可以接秒数,整个进程界面更新的时间,默认 5 秒
# -b:批量方式执行 top
# -n:与 -b 搭配使用,需要执行几次 top 的输出结果
# -p:指定某些 PID 来监测
# 在 top 执行过程中可以使用的按键命令:
# 	?:显示 top 中可输入的按键命令
# 	P:以 CPU 使用排序
# 	M:以内存使用排序
# 	q:退出 top

如果想要找进程之间的相关性,可以使用命令【pstree】。根据 pstree 的输出我们可以清楚,所有的进程都是依附在 systemd 这个进程下面的。而这个进程的 PID=1,因为它是由 Linux 内核主动调用的第一个进程。

pstree [-A|U] [-up]
# 选项与参数:
# -A:各进程树之间用 ASCII 字符连接
# -U:各进程树之间用 Unicode 字符连接
# -p:同时列出每个进程 PID
# -u:同时列出每个进程所属账号名称

管理进程

通过给予进程一个信号来管理进程,常用的信号如下:

代 号名称内容
1SIGHUP启动被终止的程序,可让该PID 重新读取自己的设定档,类似重新启动
2SIGINT相当于用键盘输入[ctrl]-c 来中断一个程序的进行
9SIGKILL代表强制中断一个程序的进行,如果该程序进行到一半, 那么尚未完成的部分可能会有『半产品』产生,类似vim会有.filename.swp 保留下来。
15SIGTERM以正常的结束程序来终止该程序。由于是正常的终止, 所以后续的动作会将他完成。不过,如果该程序已经发生问题,就是无法使用正常的方法终止时, 输入这个signal 也是没有用的。
19SIGSTOP相当于用键盘输入[ctrl]-z 来暂停一个程序的进行
  1. kill -signal PID

【kill】可以将信号传送给某个任务或 PID。

  1. killall -signal 命令名称

kill 后面必须加上 PID,而使用 killall 命令可以利用【执行命令的名称】来给予信号。

killall [-iIe] [command name]
# 选项与参数:
# -i:若需要删除时,会出现提示字符
# -I:命令名称可忽略大小写
# -e:表示后面接的【command name】要一致

查看系统资源信息

  1. 查看内存使用情况
free [-b|-k|-m|-g|-h] [-t] [-s N -c N]
# 选项与参数:
# -b:直接输入 free 时显示的单位是 KBytes,可以使用其他单位
# -t:显示物理内存与 swap 的总量
# -s:让系统不断刷新显示数据
# -c:与 -s 同时处理,列出几次的意思
  1. 查看系统与内核信息
uname [-asrmpi]
# 选项与参数:
# -a:所有系统相关信息
# -s:系统内核名称
# -r:系统内核版本
# -m:系统的硬件架构
# -p:CPU 的类型
# -i:硬件的平台
  1. 查看系统启动时间与任务负载
uptime		# 显示目前系统以及运行的时间以及平均负载情况
  1. 追踪网络或 socket 文件

【netstat】命令常用于网络监控方面。

netstat -[atunlp]
# 选项与参数:
# -a:将目前系统所有的连接、监听、socket 信息都列出来
# -t:列出 tcp 网络封包信息
# -u:列出 udp 网络封包信息
# -n:以端口号来显示
# -l:列出目前网络监听的服务
# -p:列出网络服务的进程 PID
  1. 分析内核产生的信息

命令【dmesg】可以将内核产生的信息读取出来,接合【grep】命令查找需要的信息。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值