一、进程和线程基本概念
1.1什么是进程(Process)
在Linux系统当中,触发任何一个事件时,系统都会将它定义为一个进程,并且给予这个进程一个ID,称为PID,同时依据启动这个进程的使用者与相关属性关系,给予这个PID一组有效的权限设置。
1.2什么是线程(Thread)
在 Linux 操作系统中,线程(Thread)是进程(Process)的一个执行单元。线程共享进程的资源,如内存和文件描述符,同时可以独立执行。以下是关于 Linux 线程的详细介绍,包括线程的基本概念、创建、管理、调度以及与进程的关系。
二、进程状态
进程状态码 | 含义 |
运行(R) | 进程正在执行或准备执行。 |
停止(S) | 进程被暂停执行并进入停止状态,可以通过发送信号(如 SIGSTOP 或 SIGTSTP)来实现。 |
停滞(D) | 进程处于休眠状态,等待某些条件的发生才会恢复执行。 |
跟踪(T) | 进程正在被调试器跟踪。 |
僵死(Z) | 进程已经终止,但其父进程尚未处理完该进程的退出状态,使得进程成为僵尸进程。僵尸进程将占用系统资源,直到父进程获取其退出状态。 |
三、查看进程的方法
3.1图形
1、点击System Monitor
2、输入命令gnome-system-monitor
结果
3.2 常用进程查看命令的使用
3.2.1ps常用参数说明
选项 | 选项说明 |
a | 显示当前终端机下所有的程序,包括其他用户的。 |
c | 显示进程真正的指令名称。 |
u | 显示用户相关的进程或者与用户相关的属性。 |
x | 显示与终端无关的进程。 |
e | 列出程序所使用的环境变量。 |
f | 表达程序间的相互关系。 |
o |
显示指定参数。
|
-e | 显示所有进程。 |
-f | 全格式显示进程。 |
-H | 显示树状结构,表示程序间的相互关系。 |
-o | 显示指定的参数。 |
-sort=字段 | 按指定字段排序输出结果。(在字段前加 - 表示降序) |
示例:
3.2.2命令ps ax:显示所有进程
其中PID:进程ID。
TTY:进程用到的终端。
STAT:进程状态。
TIME:进程作用CPU时长。
COMMAND:进程名称。
结果如下:
#显示系统中所有进程,并按照CPU使用率( %CPU )进行排序。
[root@localhost Desktop]# ps ax --sort=%cpu
#显示所有进程的CPU使用率( %CPU )、内存使用率( %MEM )和命令名称( comm ),并按照 CPU 使用率从高到低进行排序(降序排序)。
[root@localhost Desktop]# ps ax -o %cpu,%mem,comm --sort=-%cpu
3.2.3命令ps aux:显示所有用户进程的完整信息
其中
USER:进程所有人
#查找包含yyy的进程信息。
[root@localhost Desktop]# ps aux | grep yyy
3.2.4 ps axo命令:显示系统中所有进程的详细信息
#显示系统中所有进程的详细信息,并且指定了特定的字段输出。
[root@localhost Desktop]# ps axo pid,%mem,%cpu,pri,nice,comm,user,group,pcpu,ppid
3.3pgrep命令详解
pgrep是一个根据名称查找进程ID的命令,返回的是进程ID,若存在当个进程,则分为不同的行返回ID。
选项 | 选项说明 |
-u uid
| 按照有效用户ID查找进程。 |
-U user |
显示指定用户进程。
|
-t tty | 查找在指定终端上启动的进程。 |
-l(--list-name) | 除了 PID,还显示进程的名称。 |
-a |
显示进程的完整名称。
|
-P(父PID) | 查找指定父进程的子进程 |
示例:
#查找属于特定用户yyy的进程的命令。
[root@localhost Desktop]# pgrep -U yyy
#查找属于特定用户yyy的进程,并且会显示进程的名称以及进程ID。
[root@localhost Desktop]# pgrep -lU yyy
3.4 pidof命令
pidof 命令是一个用来查找当前运行的程序的进程 ID(PID)的命令行工具。它通常用于脚本中,以确定特定的程序是否正在运行,或者在启动或停止服务之前获取其 PID。
示例:
3.5top命令详解
top命令用于实时显示 process (进程)的动态。它用于监控正在运行系统负荷的信息,包括系统负载、CPU利用分布情况、内存使用、每个进程的资源占用情况等。
示例:
#以批量模式运行top,并设置特定的刷新频率和运行次数。
[root@localhost Desktop]# top -d 1 -n 2 -b
四、 进程的前后台调用
4.1让进程在后台运行
(1)在命令结尾添加“&”符号
在执行命令时,在命令后面加上“&”,该进程就会在后台运行。
(2)使用bg命令(适用于已经暂停的进程)
如果一个进程已经在运行并且被暂停(例如,使用Ctrl + Z暂停了一个正在前台运行的进程),可以使用bg命令将其放入后台继续运行。
4.2让进程在前台运行
(1) 使用fg命令
如果有后台运行的进程,可以使用fg命令将其调至前台运行。
4.3命令jobs:查看当前shell中在后台的所有工作
五、进程的优先级
对于CPU来说,确定一个进程先后运算的顺序的标准就是进程的优先级。
#将进程ID为3971的进程的nice值设置为 -5。
[root@localhost Desktop]# renice -5 3971
#将进程ID为3971的进程的nice值设置为 5。
[root@localhost Desktop]# renice 5 3971
#指定的nice值(10)启动gedit程序。
[root@localhost Desktop]# nice -n 10 gedit
六、进程信号的使用
6.1定义
进程之间事件异步通知的一种方式。它是一种软件中断,用于向进程发送通知和指令,以便对其进行控制或传递信息。进程信号由整数值来标识,每个值对应一个特定的信号。不同的信号对应不同的状况。
6.2信号的特点
(1)信号产生前,进程就知道如何处理 。
(2)信号一旦产生,进程能够识别信号。
(3)进程接收到信号后,不一定会立即处理,进程在收到信号后会先记录下来。
(4)信号的产生对于进程是异步的。
6.3进程信号的使用
#强制终止所有名为vim的进程。
[root@localhost Desktop]# killall -9 vim
#发送信号给特定用户yyy的所有进程的命令。
[root@localhost Desktop]# pkill -9 -u yyy
七、守护进程
7.1定义
守护进程(Daemon)是一种在后台运行的特殊进程,它们独立于控制终端,周期性地执行某些任务或提供某种服务。守护进程通常在系统启动时启动,并在系统关闭时结束。
7.2 守护进程管理命令systemctl
选项 | 选项意义 |
start
| 启动服务。 |
stop
| 关闭服务。 |
status
| 检查服务或进程的状态。 |
reload
| 重新加载服务或配置文件。 |
restart
| 重新启动服务。 |
enable
| 设置服务或功能在系统启动时自动运行。 |
enable --now
| 用于同时启用并启动服务。 |
disable
| 禁用服务。 |
list-units
| 列出当前所有已加载的 systemd 单元。 |
list-unit-files
| 列出所有已安装的 systemd 单元文件及其状态。 |
list-dependencies
| 查看 systemd 单元(如服务、目标等)依赖关系。 |
mask
|
冻结服务。
|
unmask
| 解锁。 |
set-default
| 设定系统运行模式。 |
get-default
| 查看系统运行模式。 |