Linux操作系统笔记——进程和作业

简介: Linux操作系统笔记——进程和作业

一、进程


(一)进程的概念


经过前面的知识点,我们知道Linux是一种多用户、多任务、支持多线程和多CPU的操作系统,即系统可以有多个用户同时工作,且每个用户又可以完成多个任务,这其中通过对进程的管理,来实现对用户和系统的各种命令和程序的运行管理。


进程与程序的区别是,程序是静态的,它是已经编写好完成特定功能的一组指令,而进程是动态的,Linux操作系统中把进程定义为一个可执行程序的一次执行实例(一段程序的执行过程),可以说一个程序可以同时拥有多个进程,程序是可以长期存在的,而每个进程由于都有其一定的生命周期,它们是暂时的且生命周期中包括多种不同运行阶段。

同样,Linux操作系统与Windows系统一样,它也有很多后台进程,这些后台进程涉及很多方面,例如系统初始化、网络连接、外部设备、通信端口等等。

1667221659538.jpg


(二)进程的生命周期


在Linux操作系统中,把进程分为三种状态,分别是就绪态、运行态和睡眠态,这三种状态在一定条件下可以相互转换,处于就绪态的进程已经做好准备,等待分配资源,一旦获得CPU就可以运行;运行态的进程正在占用CPU以及其他资源;睡眠态的进程由于某种条件未满足,致使无法继续运行,从而让出CPU后的等待状态。


(三)获取进程信息(ps)


1、通过ps命令可以查看当前正在执行的进程,如下可看到当前用户有两个进程在执行(这里标题行的含义一会解释):

1667221702182.jpg

当我们再次通过ps命令查看时,可以发现两次结果近乎相同,但区别在于PID(进程号)的不同,如下:

1667221719272.jpg

每个进程创建时都会得到一个PID,在这个进程的生命周期内,该进程号唯一标识该进程,第一次执行的ps命令这个进程执行完毕,第二次执行的ps命令该进程是一个新的进程,所以对应的PID进程号不同。

(1)下表是使用ps命令,标题行中常见的标题含义:

标题行名称 含义
F 旗标
S 进程的状态
C 调度参数,反映进程占用CPU的情况
UID 进程所有者的登录名
PID 进程号
PPID 创建当前进程的父进程的PID
TTY 启动该进程的终端号
TIME 占用CPU的时间
STIME 进程的启动时间
CMD 进程所产生的命令


(2)进程的状态:

状态 含义
D 无法中断的休眠状态 (通常指 IO 的进程)
R 正在运行状态
S 休眠状态
T 暂停或被追踪状态
W 内存交换状态
Z 不存在状态,或僵死状态暂时无法消除


2、在ps命令后带上参数-A/All可查看所有进程,带上参数-aux可查看所有的静态进程,带上参数-top可查看所有的动态变化的进程,如下查看所有进程:

[yyx@yyx12 ~]$ ps -All


在Linux终端输入命令:

1667221922658.jpg

标题行中第二项“S”即为进程的状态,这里可看到有S(休眠状态)和R(正在运行状态)两种进程状态:

1667221942371.jpg


3、通过在ps命令后带上参数-f,可以显示每个进程的完整信息,如下:

[yyx@yyx12 ~]$ ps -f


在Linux终端输入命令,可以看到标题行还显示了UID、PPID、TTY等标题信息:

1667221964912.jpg

4、通过在ps命令后带上参数-e,可以显示系统中所有活动进程的信息,如下:

[yyx@yyx12 ~]$ ps -e


在Linux终端输入命令,这里TTY项下显示的问号代表的含义是系统在初始启动时,该进程是根据系统配置参数自动启动运行的,故没有相应的对应终端号:

1667221986233.jpg

其实一般常用的是,直接在ps命令后带上参数-ef,用于查看所有进程以及命令行,如下:

[yyx@yyx12 ~]$ ps -ef


在Linux终端输入命令:

1667222010732.jpg


(四)暂停进程(sleep)


暂停进程可以通过sleep命令,它也可以用来使相关要执行的操作进行延迟相应的时间,从而控制程序的运行,该命令后可直接跟时间,即s(秒)、m(分钟)、h(小时)、d(天)。

例如下列命令,在延迟5秒钟后执行echo命令输出内容,如下:

[yyx@yyx12 ~]$ sleep 5s;echo "It's five seconds later."


在Linux终端输入命令,此时等待5s:

1667222038351.jpg

5s延迟之后,echo命令输出内容:

1667222050030.jpg


(五)终止进程(kill)


若要终止前台进程,我们知道可以Ctrl+C键来终止,但有时候有些进程无法终止,例如后台进程,无法方便地终止该进程,此时就可以通过kill命令进行终止,其后跟信号编号(发送给该进程的信号)和PID进程号(PID数值最小的进程最先运行),另外普通用户只能终止自己的进程,而具有超级用户权限的系统管理员可以终止系统中任何进程。

kill signal PID  #signal为信号,PID为进程号,PID可以通过ps命令查到


9号信号:

有时候有些进程屏蔽了默认信号编号的作用或挂起的进程进入了死循环,此时就要通过9号信号来终止这种进程,即kill命令后跟9(即信号编号为9),再跟进程号PID。


二、作业


(一)作业的概念


作业(job)是针对用户(计算机操作者)来讲,用户完成某项任务而启动的进程,一个作业既可以只包含一个进程,也可以包含多个进程,进程之间互相协作完成任务。

例如下列命令就是一个作业,它包括多个命令,在执行时Shell将启动两个进程:

[yyx329@192 ~]$ cat /etc/filesystems | grep xfs
[yyx329@192 ~]$ cat /etc/filesystems | grep ext


在Linux终端输入命令:

1667222114297.jpg


(二)作业号


在之前的文章中讲过前台命令和后台命令:Linux操作系统笔记——Shell 命令解释器的基本知识,即放在后台执行的程序(命令)称为后台命令,可以在命令的后面加上“&”符号从而让Shell识别这是一个后台命令,后台命令不用等待该命令执行完成,就可立即接收新的命令,另外后台进程执行完后会返回一个作业号以及一个进程号(PID)。


例如下列命令,返回了一个作业号和进程号:

[yyx@yyx12 ~]$ su root
...
[root@yyx12 yyx]# ls -l > /home/newfile &
...


在Linux终端输入命令,可见第一行返回的作业号是1,进程号为9665:

1667222171787.jpg

第二行显示的是作业号、状态和所执行的命令,第二行[1]后面的“+”号下面会有解释。


(三)作业的状态


常见的作业状态如下表:

作业状态 含义
正在运行【Running】 后台作业(&),表示正在执行
完成【Done】 作业已完成,返回的状态码为0
完成并退出【Done(code)】 作业已完成并退出,返回的状态码为非0
已停止【Stopped】 前台作业,当前被Ctrl+Z挂起
已终止【Terminated】 作业被终止


(四)作业的挂起


例如我们在执行某个作业时,想要将该作业挂起,此时可以通过Ctrl+Z键,然后Shell会显示相关的作业号、状态和所执行的命令信息。


例如,通过vi命令编辑在/home目录下名称为newfile文件,通过Ctrl+Z暂时挂起该作业:

[yyx@yyx12 ~]$ vi /home/newfile


在Linux终端输入命令:

1667222224810.jpg

返回到vi编辑器的命令模式下(Esc键),然后再通过Ctrl+Z挂起该作业,可看到下面信息:

1667222236416.jpg


(五)作业的切回(fg)


若想将挂起的作业切回,可以通过fg命令,fg后面可跟作业号或作业的命令名称,若参数缺省则会将作业号为1的作业切到前台来执行,若当前系统只有一个作业在后台进行,则可以直接使用fg命令不带参数。

fg命令的参数如下表:

参数 含义
%n n为正整数,表示作业号
%string 以字符串开头的命令所对应的作业
%?string 包含字符串的命令所对应的作业
%+或%% 最近提交的一个作业
%- 倒数第二个提交的作业

例如对刚刚挂起的vi /home/newfile进行切换至前台执行:

[yyx@yyx12 ~]$ fg


在Linux终端输入命令,可见切回vi编辑页面:

1667222271381.jpg


(六)查看后台执行或挂起(jobs)


可以通过直接输入jobs命令查看本用户当前后台执行或挂起的作业,若带参数-l则显示作业的详细信息,带参数-p则只显示作业的PID。


例如,直接通过jobs命令显示刚刚挂起的作业,如下:

1667222289507.jpg

默认作业:

对于一个用户来说,只能有一个默认作业(+),同时也只能有一个即将成为默认作业的作业(-),当默认作业退出后,该作业会成为默认作业,作业号后的符号标识含义如下表:


符号标识 含义
+ 表示该作业号是默认作业
- 表示该即将成为默认作业
无符号 其他作业

当通过fg命令切回作业时,若没有指定作业以及参数,此时会将默认作业切到前台执行,即带有“+”的作业号的作业,


目录
打赏
0
0
0
0
22
分享
相关文章
【Linux进程概念】—— 操作系统中的“生命体”,计算机里的“多线程”
在计算机系统的底层架构中,操作系统肩负着资源管理与任务调度的重任。当我们启动各类应用程序时,其背后复杂的运作机制便悄然展开。程序,作为静态的指令集合,如何在系统中实现动态执行?本文带你一探究竟!
【Linux进程概念】—— 操作系统中的“生命体”,计算机里的“多线程”
【Linux】冯诺依曼体系与操作系统理解
本文深入浅出地讲解了计算机体系的两大核心概念:冯诺依曼体系结构与操作系统。冯诺依曼体系作为现代计算机的基础架构,通过中央处理器、存储器和输入输出设备协同工作,解决了硬件性能瓶颈问题。操作系统则是连接硬件与用户的桥梁,管理软硬件资源,提供运行环境。文章还详细解析了操作系统的分类、意义及管理方式,并重点阐述了系统调用的作用,为学习Linux系统编程打下坚实基础。适合希望深入了解计算机原理和技术内幕的读者。
40 1
【YashanDB 知识库】如何避免 yasdb 进程被 Linux OOM Killer 杀掉
本文来自YashanDB官网,探讨Linux系统中OOM Killer对数据库服务器的影响及解决方法。当内存接近耗尽时,OOM Killer会杀死占用最多内存的进程,这可能导致数据库主进程被误杀。为避免此问题,可采取两种方法:一是在OS层面关闭OOM Killer,通过修改`/etc/sysctl.conf`文件并重启生效;二是豁免数据库进程,由数据库实例用户借助`sudo`权限调整`oom_score_adj`值。这些措施有助于保护数据库进程免受系统内存管理机制的影响。
【Linux】进程概念和进程状态
本文详细介绍了Linux系统中进程的核心概念与管理机制。从进程的定义出发,阐述了其作为操作系统资源管理的基本单位的重要性,并深入解析了task_struct结构体的内容及其在进程管理中的作用。同时,文章讲解了进程的基本操作(如获取PID、查看进程信息等)、父进程与子进程的关系(重点分析fork函数)、以及进程的三种主要状态(运行、阻塞、挂起)。此外,还探讨了Linux特有的进程状态表示和孤儿进程的处理方式。通过学习这些内容,读者可以更好地理解Linux进程的运行原理并优化系统性能。
34 4
|
30天前
|
Linux:守护进程(进程组、会话和守护进程)
守护进程在 Linux 系统中扮演着重要角色,通过后台执行关键任务和服务,确保系统的稳定运行。理解进程组和会话的概念,是正确创建和管理守护进程的基础。使用现代的 `systemd` 或传统的 `init.d` 方法,可以有效地管理守护进程,提升系统的可靠性和可维护性。希望本文能帮助读者深入理解并掌握 Linux 守护进程的相关知识。
41 7
|
29天前
|
Linux 进程前台后台切换与作业控制
进程前台/后台切换及作业控制简介: 在 Shell 中,启动的程序默认为前台进程,会占用终端直到执行完毕。例如,执行 `./shella.sh` 时,终端会被占用。为避免不便,可将命令放到后台运行,如 `./shella.sh &`,此时终端命令行立即返回,可继续输入其他命令。 常用作业控制命令: - `fg %1`:将后台作业切换到前台。 - `Ctrl + Z`:暂停前台作业并放到后台。 - `bg %1`:让暂停的后台作业继续执行。 - `kill %1`:终止后台作业。 优先级调整:
49 5
Linux 进程管理基础
Linux 进程是操作系统中运行程序的实例,彼此隔离以确保安全性和稳定性。常用命令查看和管理进程:`ps` 显示当前终端会话相关进程;`ps aux` 和 `ps -ef` 显示所有进程信息;`ps -u username` 查看特定用户进程;`ps -e | grep <进程名>` 查找特定进程;`ps -p <PID>` 查看指定 PID 的进程详情。终止进程可用 `kill <PID>` 或 `pkill <进程名>`,强制终止加 `-9` 选项。
27 3
|
2天前
|
linux命令详细说明以及案例
本文介绍了常用的 Linux 命令及其详细说明和示例,包括:`ls`(列出目录内容)、`cd`(更改目录)、`rm` 和 `mv`(删除与移动文件)、`grep`(搜索文本)、`cat`(显示文件内容)以及 `chmod`(更改文件权限)。每个命令均配有功能描述、选项说明及实际案例,帮助用户更好地掌握 Linux 命令的使用方法。
82 56
|
5天前
|
Linux基础:文件和目录类命令分析。
总的来说,这些基础命令,像是Linux中藏匿的小矮人,每一次我们使用他们,他们就把我们的指令准确的传递给Linux,让我们的指令变为现实。所以,现在就开始你的Linux之旅,挥动你的命令之剑,探索这个充满神秘而又奇妙的世界吧!
49 19

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等