Linux: 进程管理

文章介绍了如何在Linux中结束一个失控的进程,包括创建脚本、后台执行、获取PID以及使用kill命令。同时,讨论了进程的概念、属性如PID、UID、优先级和谦让度,并提到了监控进程的命令ps和top,以及调整进程优先级的nice和renice命令。最后,文章提及了/PROC文件系统在进程管理中的作用。
摘要由CSDN通过智能技术生成

一,快速上手,结束一个失控的进程

在主目录中,用文本编辑器创建一个文本文件badpro,如下:

#! /bin/bash
while echo "I'm making files!!"
do
	mkdir adir
	cd adir
	touch afile
	sleep 2s
done

将该文件设定为可执行文件,然后在后台执行:

chmod +x badpro
./badpro &   #在命令后加 &,表示 将该命令在后台执行

之所以要将该程序在后台执行,是因为在前台执行的话,我们可以轻而易举的用ctrl c 终止程序。
程序在终端运行起来后,打开另外一个终端,输入如下命令 获取badpro的进程号PID:

ps aux | grep badpro #ps用于获取进程的详细信息,如:ps -p 1234 获取PID为1234的进程的详细信息;aux 用于查看系统当前所有进程; ps aux 可以罗列出所有进程的详细信息,将这些信息通过管道|输送给grep,grep badpro将从所有进程信息中选出为badpro的进行信息,如下:


从上可以看出badpro的进程号为12974,我们可以利用kill命令来结束badpro进程:

kill 12974

在终结进程badpro后,要记得回到badpro运行的那个终端,将生成的文件夹 以及 文件 删除:

rm -r adir

二,什么是进程

Linux是一种多用户,多进程的操作系统。在Linux内核中维护着一张表,这张表记录着Linux系统中所有用户进程和系统进程的信息,这些信息包括:
进程的内存地址;
进程当前的状态;
进程的优先级;
进程的属主;
Linux系统提供了让用户监视和控制进程的一种工具。

三,进程的属性

Linux进程有一系列属性,这些属性决定着进程被处理的优先级,以及其能够享用何种资源,下面简单介绍几种常用的进程属性:

  • PID:进程ID号
  • PPID:父进程的PID
  • UID 和 EUID
    进程的UID为进程属主的UID;
    EUID为进程的“有效用户ID”,一般情况下,进程的UID和EUID相同,除了setuid程序,passwd就是一个典型的setuid程序:
    passwd允许用户修改自己的口令,而口令存在etc/shadow中,该文件仅允许root用户更改,当用户执行passwd时,passwd会给与用户root权限,也就是说执行passwd的UID为当前用户ID,而EUID则是root用户的ID。
    除了UID和EUID,Linux还给进程分配了其他的一些ID,如:saved UID 和 FSUID;
  • GID 和 EGID
    GID为进程所属组ID,对应于EUID,进程同样有一个EGID,可以通过setgid程序来设置;
  • 谦让度 和 优先级
    进程的优先级决定了其受CPU优待的程度,优先级越高,会越早的被CPU处理。
    进程的“谦让度“为用户可设置的一个量,用户可以通过设置”谦让度“来影响CPU处理进程的早晚,谦让度 越高,进程会被CPU更晚 处理。

四,监视进程:ps命令

ps是常用的监视进程的命令,可以一次性给出当前系统中所有进程信息的快照,但是这样的信息往往缺乏时效性。当管理员需要实时监视进程运行情况时,就需要不停的运行ps命令,这种操作缺乏效率。
关于ps,常用命令为以下2个:

  • ps aux
ps aux #用于显示当前系统上,所有的进程信息,下面展示了部分显示内容,以及各个字段含义:


  • ps lax
ps lax #显示进程的父进程ID PID 和 其谦让度 NI,与ps aux不同,ps lax不会显示进程属主的用户名,因此,可以提供更快的运行速度(ps aux 需要先将UID 转为 用户名,之后才会显示,因此,在运行速度上 不如 ps lax)

五,及时跟踪进程信息:top命令

ps是常用的监视进程的命令,可以一次性给出当前系统中所有进程信息的快照,但是这样的信息往往缺乏时效性。当管理员需要实时监视进程运行情况时,就需要不停的运行ps命令,这种操作缺乏效率。为了提升监控效率,Linux系统给出了top命令。
使用top命令,显示的进程信息 会 默认 每10秒 更新一次,那些使用CPU最多的进程会排在最前面,此外,用户还可以查看每个进程的CPU占比,内存占比 等 信息。

top

在这里插入图片描述

六,查看占用文件的进程:lsof

lsof 命令可以列出当前系统中,所有打开(占用)文件的 进程信息。
lsof 文档名,能够列出使用 该文档的 所有进程 的 信息。

lsof database.doc

七,向进程发送信号:kill

kill命令并不总是用来“杀死进程的”,它的确切含义是 向某一个程序 发送信息,根据其发送信息的不同,系统执行结果也不一样。
对于kill发出的大部分signal,程序都能够捕捉的到,据此,程序可以选择 “忽略/封锁” 该信号,即 不对signal做出任何相应。
但是,对于kill发出的KILL信号,程序无法捕捉,即 系统会强行执行KILL信号(也即 杀死该进程),对于 KILL 信号 都无法杀死的程序,其多半是由于 退化的I/O(输入/输出)虚假锁定造成的,此时,重新启动系统是杀死该进程的唯一办法。

使用 kill -l 可以列出kill所拥有的signals 及其编号(根据硬件结构的不同,signals会有所不同):

kill -l

在这里插入图片描述
上表中的signals,绝大部分不会被使用,下表为一些常用的signals:
在这里插入图片描述
注意,信号的前缀SIG可以省略,也即 SIGEXIT 等同于 EXIT。

以TERM为例,在默认情况下,kill向程序发出TERM信号,程序会终止:

kill -TERM 12974 

但是,如前所述,程序能够捕捉 signal,从而忽略 kill 发送的信息,bc 为一个 命令行程序,但我们在终端中执行bc后,然后 CTRL+C(也即 kill命令 向程序发送 TERM 信号),正常情况下,程序应该终止,但是bc能够捕捉该信号,并返回自己的应对“use quit to exit"。
在这里插入图片描述
如果你也想让程序忽略 kill发送的信号,那么只要在程序首行加入 trap “” 信号名,下面的例子中,由于 在程序首航加入 trap “” TERM,因此,该程序会忽略kill发出的TERM信号:

#! /bin/bash
trap "" TERM
while echo "I'm making files!!"
do 
	makedir adir
	cd adir
	touch afile
	sleep 2s
done

如果你想要杀死该进程,则必须使用kill -KILL PID:

sudo kill -KILL pid
#等同于
sudo kill -SIGKILL pid
#等同于
sudo kill -9 pid

八,调整进程的谦让度:nice 和 renice

nice可以在启动程序时,设置其谦让度,高谦让度等于低优先级,这意味着其仅能占用很少的CPU时间。程序谦让度的值限定在 -20 到 19 之间。程序的属主,通过nice命令,只能调高谦让度,而不能降低谦让度,如果想要降低程序的谦让度,则必须以root用户来执行nice命令。子进程 会 继承 父进程的谦让度,同样的,子进程也仅能调高其谦让度,如若想降低其谦让度,则必须以root用户来执行nice命令。
renice可以在进程运行时,调整其谦让度值

#nice命令通过 参数 -n 来设置进程的谦让度
nice -n 2 bc #将程序bc的谦让度设置为2
ps lax #给出系统中进程的详细信息,NI表示进程的谦让度
sudo nice -n -3 bc #如果想要降低bc的谦让度,则需要通过root用户(sudo)来进行
ps lax #通过该命令,查看bc的谦让度
#######################################################################################
#nice命令不带参数时,表示 将程序的谦让度增量设为10;
#通常,程序的默认谦让度值为0,可以通过不带任何参数的nice命令查看程序的默认谦让度
nice
#输出为:0,表示程序的默认谦让度
nice bc #将bc的谦让度增量设为10 ,此时,bc的NI为10
ps lax #通过该命令,查看bc的PID,为:8576
#区别于nice命令,renice命令用于设置程序的绝对谦让度,其可以在进程运行时调整其谦让度值,其语法如下:
renice 12 -p 8576 #-p 表示程序的PID,通过该命令,将bc的谦让度从10变为了12;

九,/PROC文件系统

/PROC目录中存放着内核有关系统状态的各种有意义的信息。当系统处于运行状态时,内核会随时向/PROC目录写入数据。ps和top命令就是从这个地方读取数据的,可以说,/PROC是操作系统向用户提供的一条通往内核的通道,用户甚至可以通过向/PROC中写入数据而修改操作系统的相关参数,以下是/PROC中的部分文件概览:那些以数字命令的目录存放着以该数字为PID的进程信息。
在这里插入图片描述
ps命令就是通过读取 stat 文件 来向用户提供 当前系统的进程状态信息的 。
note that:/PROC文件系统在系统开发中有者广泛引用,有意者可加深学习。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sarah ฅʕ•̫͡•ʔฅ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值