1 进程
1.1什么是进程
进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。
进程是已启动的可执行程序的运行实例,进程有以下组成部分:
- 已分配内存的地址空间;
- 安全属性,包括所有权凭据和特权;
- 有权限限制;
- 程序代码的一个或多个执行线程;
进程类型
- 交互进程:是由shell启动的进程,它既可以在前台运行,也可以在后台运行。交互进程在执行过程中,要求与用户进行交互操作。简单来说就是用户需要给出某些参数或者信息,进程才能继续执行。
2.批处理进程:与windows原来的批处理很类似,是一个进程序列。该进程负责按照顺序启动其它进程。
3.守护进程:是是执行特定功能或者执行系统相关任务的后台进程。守护进程只是一个特殊的进程,不是内核的组成部分。许多守护进程在系统启动时启动,直到系统关闭时才停止运行。而某些守护进程只是在需要时才会启动,比如FTP或者Apache服务等,可以在需要的时候才启动该服务。
另外,根据进程状态的不同,又可以把进程分为另外三类:守护进程、孤儿进程和僵尸进程。
1.守护进程:(补充):所有守护进程都可以超级用户(用户ID为0)的优先权运行;守护进程没有控制终端;守护进程的父进程都是init进程(即1号进程)。
2.孤儿进程:一个父进程退出后,它的一个或多个子进程还在运行,那么这些子进程将成为孤儿进程。孤儿进程将被init进程所收养,并由init进程对它们完成状态收集工作。
3.僵尸进程:一个子进程结束但是没有完全释放内存(在内核中的 task_struct没有释放),该进程就成为僵尸进程。
当僵尸进程的父进程结束后该僵尸进程就会被init进程所收养,最终被回收。
父进程与子进程:
父进程复制自己的地址空间(fork派生)创建一个新的(子)进程结构。
每个进程分配一个唯一的进程ID(PID),满足跟踪安全性之需。
任何进程都可以创建子进程。
所有进程都是第一个系统进程的后代。
僵尸进程
在UNIX 系统中,一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他, 那么他将变成一个僵尸进程。 但是如果该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程, 因为每个进程结束的时候,系统都会扫描当前系统中所运行的所有进程, 看有没有哪个进程是刚刚结束的这个进程的子进程,如果是的话,就由init 来接管他,成为他的父进程。
1.2 线程
线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
60年代,在OS中能拥有资源和独立运行的基本单位是进程,然而随着计算机技术的发展,进程出现了很多弊端,一是由于进程是资源拥有者,创建、撤消与切换存在较大的时空开销,因此需要引入轻型进程;二是由于对称多处理机(SMP)出现,可以满足多个运行单位,而多个进程并行开销过大。因此在80年代,出现了能独立运行的基本单位——线程(Threads)。
查看进程有几个线程,可以使用 "cat /proc/PID/status"查看
2 查看进程
2.1 ps命令——静态查看进程
方法一:
ps -aux
- a:显示终端上的所有进程,包括其它用户的进程。
- u:表示列出进程的用户
- x:显示所有终端的进程
另外常用选项
- -e:显示系统内的所有进程信息。
- -l:使用长(Long)格式显示进程信息。
- -f:使用完整的(Full)格式显示进程信
- k|--sort 属性:对属性排序,属性前加 - 表示降序排列。
2.2 ps -aux
使用“ps aux”命令查看进程信息:
各列解释
| 内容 | 含义 |
|---|---|
| USER | 进程的用户 |
| PID | 进程的ID |
| %CPU | 进程占用的CPU百分比 |
| %MEM | 占用内存的百分比 |
| VSZ | 该进程使用的虚拟内存量(KB) |
| RSS | 该进程占用的物理内存量(KB) |
| TTY | 启动进程的终端名 |
| STAT | 该进程的状态{D:不可中断的休眠状态; R:正在运行状态; S:处于休眠状态,可被唤醒; T:停止状态,可能是在后台暂停或进程处于跟踪调试状态; Z:僵尸进程,进程已经中止,但是部分程序还在内存当中 |
| START | 该进程被触发启动时间 |
| TIME | 该进程实际使用CPU运行的时间 |
| COMMAND | 进程的启动命令 |
2.3 ps -elf
常用选项
- -e:显示系统内的所有进程信息
- -l:使用长格式显示进程信息
- -f:使用完整的格式显示进程信息
- -a:显示所有的进程的pid号
- -T:查看所有的线程信息。
各列的解释
| 内容 | 含义 |
|---|---|
| F | 内核分配给进程的系统标记 |
| S | 进程的状态 |
| UID | 启动这些进程的UID |
| PID | 进程的进程ID号 |
| PPID | 父进程的进程号 |
| C | 进程生命周期中的CPU利用率 |
| PRI | 进程的优先级(越大的数字代表越低的优先级) |
| NI | 谦让度值用来参与决定优先级 |
| ADDR | 进程的内存地址 |
| SZ | 假如进程被换出,所需交换空间的大致大小 |
| WCHAN | 若该进程在睡眠,则显示睡眠中的系统函数名 |
| STIME | 进程启动时的系统时间 |
| TTY | 进程启动时的终端设备 |
| TIME | 运行进程需要的累计CPU时间 |
| CMD | 进程的启动命令 |
2.4 top:动态查看进程信息
2.4.1 top常用命令
P键:根据CPU使用百分比大小进行排序
M键:根据驻留内存大小进行排序
N键:根据启动时间进行排序
c键:切换显示命令名称和完整命令行
h键:可以获得top程序的在线帮助信息
k键:根据提示输入指定进程PTD号并按enter链终止对应的进程
q键:退出top程序
数字1键:显示CPU个数和程序
top -H:显示所有状态
top -H -P :显示特定进程中的线程
tty终端 复制代码 复制代码
centOS 7系统,tty1表示图形界面,tty2-tty6表示界面,可以用Ctrl+Alt+F1~F6切换。
pts说明是用远程工具链接的,比如xshell, 后面的数字表示登录的时间顺序,越小证明登录的越早
load cverage:平均负载
2.4.2 进程信息区各列解释:
| 内容 | 含义 |
|---|---|
| PID | 进程id |
| USER | 进程所有者的用户名 |
| PR | 优先级 |
| NI | 谦让度值。负值表示高优先级,正值表示低优先级 |
| VIRT | 进程使用的虚拟内存总量大小(kb) |
| RES | 进程使用的物理内存大小(kb) |
| SHR | 共享内存大小,(kb) |
| S | 进程状态 |
| %CPU | 上次更新到现在的CPU时间占用百分比 |
| %MEM | 进程使用的物理内存比 |
| TIME+ | 进%MEM程使用的CPU时间总计,单位1/100秒 |
| COMMAND | 命令名/命令行 |
2.5 pstree命令——以树形结构列出进程信息
常用选项:
- -a:显示启动每个进程对应的完整指令,包括启动进程的路径、参数等。
- -p:显示PID。
- -p < pid> : 显示指定进程及其子进程,同时显示每个进程的PID。
- -u:显示进程的用户名称。
- -u 用户名:显示指定用户的进程。
- -H < pid>:高亮显示指定进程及其前辈进程。
- -T:不显示线程thread,默认显示线程。
示例:
1)pstree -u 用户名,显示指定用户root的进程
2)pstree -a,显示启动进程的完整指令,包括启动进程的路径、参数等。
3)-aup,同时显示启动进程的完整指令、进程的所属用户、进程PID。
2.6 pgrep命令——查询进程的PID
根据特定条件查询进程的PID信息。
- -U:指定用户
- -l:显示进程名
- -a:显示完整格式的进程名
- -P < PID>:显示指定进程的子进程
示例:
-l 显示log进程名
2.7 prtstat命令——查看指定的进程
常用选项
-r: 格式显示(raw)+ pid
2.8 lsof命令——列举被打开的文件
lsof 命令,“list opened files”的缩写,直译过来,就是列举系统中已经被打开的文件。通过 lsof 命令,我们就可以根据文件找到对应的进程信息,也可以根据进程信息找到进程打开的文件。
常用选项:
| 选项 | 功能 |
|---|---|
| -c 字符串 | 只列出以字符串开头的进程打开的文件。 |
| +d 目录名 | 列出某个目录中所有被进程调用的文件。 |
| -u 用户名 | 只列出某个用户的进程打开的文件。 |
| -p pid | 列出某个 PID 进程打开的文件。 |
示例:
1.查询打开/bin/bash文件的所有进程
2.查询250进程打开的所有文件
[root@localhost ~]#lsof -p 250
3.查询root用户打开的所有文件
[root@localhost ~]# lsof -u root
3. 启动进程
3.1 手工启动
- 前台启动:用户输入命令,直接执行程序
- 后台启动:在命令行尾加入"&"符号
3.2 调度启动
- 使用at 命令,设置一次性计划任务
- 使用crontab命令,设置周期性计划任务
4. 进程的前后台调度
- ctrl+z组合键
将当前进程挂起,即调入后台并停止执行。 复制代码 复制代码 - jobs 命令
job [-l] 查看处于后台的任务列表 复制代码 复制代码 - fg 命令
将后台进程恢复到前台运行,可指定任务序号 复制代码 复制代码
5. 终止进程的运行
5.1 Ctrl + c组合键
中断正在执行的命令 复制代码 复制代码
5.2 kill,killall 命令
kill 从字面来看,就是用来杀死进程的命令,但事实上,这个或多或少带有一定的误导性。从本质上讲,kill 命令只是用来向进程发送一个信号,至于这个信号是什么,是用户指定的。
也就是说,kill 命令的执行原理是这样的,kill 命令会向操作系统内核发送一个信号(多是终止信号)和目标进程的 PID,然后系统内核根据收到的信号类型,对指定进程进行相应的操作。
- kill用于终止指定PID号的进程
- killall用于终止指定名称相关的所有进程
- -9用于强制终止
5.3 pkill命令
pkill命令
- 根据特定条件终止相应的进程
常用命令选项
- -U:根据进程所属的用户名终止相应进程
- -t:根据进程所在的终端终止相应进程
举例:
终止root进程,直接关机了
6. 计划任务管理 at命令
at命令
一次性计划任务
at [HH:MM] [yyyy-mm-dd]:设置一次性任务,按ctrl+d 提交任务。
atq :查看at任务。
atrm:删除at任务。
案例:
7.crontab周期性任务设置
7.1 crontab命令简介
- 按照预先设置的时间周期(分钟、小时、天......)重复执行用户指定的命令操作。
- 属于周期性计划任务。
- 主要设置文件。
- 全局配置文件,位于文件:/etc/crontab
- 系统默认的设置,位于目录:/etc/cron.*/
- 用户定义的设置,位于文件:/var/spool/cron/用户名
查看/etc/crontab文件:
cat /etc/crontab 复制代码 复制代码
常用命令:
crontab -e [-u 用户名] //编辑计划任务
crontab -l [-u 用户名] //查看计划任务
crontab -r [-u 用户名] //删除计划任务
7.2 crontab任务配置的格式
时间数值的特殊表示方法
- *表示该范围内的任意时间
- ,表示间隔的多个不连续时间点
- -表示一个连续的时间范围
- /指定间隔的时间频率 */5
案例:
8. 总结
1、查看进程命令
静态查看:ps aux,ps -elf
动态查看:top
查看指定进程:prtstat
以树形结构列出:pstree
列举被打开的文件:lsof
监控系统资源:vmstat、iostat
发现僵尸进程(状态为Z)一定要清除
2、控制进程
- 后台启动:
命令行尾加”&“符号。
- 前后台调度:
ctrl+z 挂起当前进程,
jobs查看任务列表
fg 序号,将前台进程调到后台运行。
- 杀死进程:
kill [信号] PID
killall 进程名
pkill [信号] [-U 用户名]
pkill [信号] [-t 终端名]
3、计划任务管理
- at一次性任务设置
at [HH:MM] [yyyy-mm-dd]:设置一次性任务,按ctrl+d 提交任务。
atq :查看at任务。
atrm:删除at任务。
- crontab周期性任务设置
crontab -e:编辑计划任务。
crontab -l:查看计划任务。
时间格式:分、时、日、月、周几。 可以查看cat /etc/crontab 文件。
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjyfx/16380.html