目录
1 进程
1.1 什么是进程
进程(Process)是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配和调度的一个独立单位,是应用程序运行时的载体。进程是一种抽象的概念,并没有统一的定义。
简单的说,进程可以理解为运行中的程序。
一个进程通常由程序、数据集合和进程控制块三部分组成。
1.2 进程的特征
进程通常具有以下四个特征:
- 动态性:进程是程序的一次执行过程,它是临时的,有相对短的生命周期;它是动态的,会动态消亡
- 并发性:任何进程都可以与别的进程并发执行
- 独立性:进程是系统尽进行资源分配的一个独立的单位
- 结构性:进程有固定的三部分组成
2 线程
2.1 什么是线程
线程是操作系统能够进行运算调度的最小单位。它包含于进程,是进程中的实际运行单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每个线程可以执行不同的任务
在某种程度上来说,“一心两用”可以理解为一个进程带了两个线程
在早期的计算机中即使并没有线程的概念,那时候进程是能拥有资源和独立运行的最小单位,也是程序执行的最小单位。后来,随着计算机的发展,出现了弊端——由于进程是资源拥有者,创建、撤消与切换存在较大的时空开销。因此,线程的概念就诞生了
2.2 线程的特点
在多线程OS中,通常是在一个进程中包括多个线程,每个线程都是作为利用CPU的基本单位,是花费最小开销的实体。线程具有以下属性:
- 轻型实体
- 独立调度和分派的基本单位
- 可并发执行
- 共享进程资源
3 进程与线程的区别
进程是操作系统分配资源的最小单位,线程是程序执行的CPU调度的最小单位
一个进程由多个线程组成,线程是一个进程中代码的不同执行路线
线程的上下文切换比进程的上下文切换快很多
4 进程管理
4.1 ps
显示当前进程的状态
Usage: ps [options]
Options:
-A 列出所有进程
-w 显示加宽(可显示较多的信息)
-au 显示较详细的信息
-aux 显示所有包括其他使用者的进程
#ps -au(x)显示的信息从左到右依次为进程所有者、pid、CPU利用率、内存利用率、虚拟内存大小、物理内存大小、终端编号、进程状态、开始时间、执行时间、执行的命令
[root@linux1 ~]# ps -aux | head -5
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.2 241052 7580 ? Ss 08:46 0:16 /usr/lib/systemd/systemd --switched-root --system --deserialize 17
root 2 0.0 0.0 0 0 ? S 08:46 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? I< 08:46 0:00 [rcu_gp]
root 4 0.0 0.0 0 0 ? I< 08:46 0:00 [rcu_par_gp]
[root@linux1 ~]#
ps可查看到的进程状态主要有以下几种:
- D: 无法中断的休眠状态
- R: 正在执行
- S: 禁止状态
- T: 暂停执行
- Z: 不存在但暂时无法消除
- W: 没有足够的内存可分配
- L: 内存分页并带锁
- <: 高优先级进程
- N: 低优先级进程
- +:前台进程
4.2 pstree
以树状结构查看当前所有进程
Usage: pstree [-acglpsStuZ] [ -h | -H PID ] [ -n | -N type ]
[ -A | -G | -U ] [ PID | USER ]
pstree -V
Options:
-L 显示线程
-e 显示所有进程,相当于-A
-f 显示完整格式程序信息
-F 显示更完整格式的进程信息
-u <userlist> 指定有效的uid或用户名
-g <grouplist> 指定有效的gid或组名
-p pid 显示指定pid的进程
--ppid pid 显示属于pid的子进程
-t <ttylist> 指定tty
4.3 kill
删除执行中的进程
Usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]
Options:
-l 显示所有信息编号
-s 指定要发出的信息
常用的信号是1(HUP)、9(KILL)、15(TERM)
Eg:
[root@linux1 ~]# kill 12345 #杀死pid为12345的进程
[root@linux1 ~]# kill -kill 12345 #强制杀死进程
[root@linux1 ~]# kill -9 12345 #彻底杀死进程
4.4 top
用于显示系统的整体性能信息以及正在运行的进程
Usage: top -hv | -bcEHiOSs1 -d secs -n max -u|U user -p pid(s) -o field -w [cols]
Eg:
[root@linux1 ~]# top
top - 18:47:21 up 14:23, 3 users, load average: 0.00, 0.11, 0.13
Tasks: 230 total, 1 running, 229 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.2 us, 0.5 sy, 0.0 ni, 98.5 id, 0.0 wa, 0.7 hi, 0.2 si, 0.0 st
MiB Mem : 3634.5 total, 3203.6 free, 253.7 used, 177.2 buff/cache
MiB Swap: 2048.0 total, 2001.4 free, 46.6 used. 3172.1 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
15328 root 20 0 54468 4488 3596 R 0.7 0.1 0:00.13 top
966 root 20 0 426744 4224 3240 S 0.3 0.1 1:29.58 vmtoolsd
1 root 20 0 241052 7620 4680 S 0.0 0.2 0:16.81 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.15 kthreadd
3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp
4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par_+
5 进程间通信
5.1 IPC
IPC是指在同一台计算机或者不同计算机上的不同进程之间进行数据交换和通信。常见的IPC方式包括共享内存、消息队列、信号量、管道等。这些方式可以让不同的进程之间进行数据共享和通信,以实现协作和协同工作。
5.2 RPC
RPC是一种远程通信的方式,允许程序调用另一个地址空间(通常是另一台计算机)的过程或函数,就像调用本地过程一样。RPC隐藏了网络通信的细节,使得远程过程调用看起来像是本地调用一样简单。