Linux基础入门:⑨Linux进程管理
程序是一组指令及参数的集合,按照既定的逻辑控制计算机运行用来完成特定任务
进程则是运行着的程序,是操作系统执行的基本单位,是程序运行的过程, 动态,有生命周期及运行状态
程序和进程的区别
程序是静态的,它只是一组指令的集合,不具有任何的运行意义。而进程是程序运行的动态过程
进程和程序并不是一一对应的关系,相同的程序运行在不同的数据集上就是不同的进程
进程还具有并发性和交往性,而程序却是封闭的
进程和线程的区别
一个进程可以拥有多个线程,而一个线程同时只能被一个进程所拥有
线程不能单独执行,但是每一个线程都有程序的入口、执行序列以及程序出口,它必须组成进程才能被执
行
父子进程的关系 子进程是由一个进程所产生的进程,产生这个子进程的进程称为父进程 在linux系统中,使用系统调用fork创建进程。fork复制的内容包括父进程的数据和堆栈段以及父进程的进程环境。 父进程终止子进程自然终止。子进程继承父进程的安全性身份、过去和当前的文件描述符、端口和资源特权、环境变量,以及程序代码。随后,子进程可能exec自己的程序代码。通常,父进程在子进程运行期间处于睡眠(sleeping)状态。当进程完成时发出(exit)信号请求,在退出时,子进程已经关闭或丢弃了其资源环境,剩余的部分称之为僵停(僵尸
Zombie)。父进程在子进程退出时收到信号而被唤醒,清理剩余的结构,然后继续执行其自己的程序代码。
Linux进程管理命令
命令 | 作用 |
---|---|
pstree | 用于查看进程树之间的关系 |
pstree-A: | 各进程树之间的连接以ASCII码字符来连接 |
pstree-U | 各进程树之间的连接以utf8字符来连接,某些终端可能会有错误 |
pstree-p | 同时列出每个进程的PID |
pstree-u | 同时列出每个进程的所属账号名称: |
命令 | 作用 |
---|---|
pgrep | 经常要查看进程的信息,包括进程的是否已经消亡 |
pgrep-l | 同时显示进程名和PID |
pgrep-o | 当匹配多个进程时,显示进程号最小的那个 |
pgrep-n | 当匹配多个进程时,显示进程号最大的那个 |
命令 | 作用 |
---|---|
kill | 杀死指定的进程 |
-Z | 只杀死拥有scontext 的进程 |
-e | 要求匹配进程名称 |
-I | 忽略小写 |
-g | 杀死进程组而不是进程 |
-i | 交互模式,杀死进程前先询问用户 |
-l | 列出所有的已知信号名称 |
-q | 不输出警告信息 |
-s | 发送指定的信号 |
-v | 报告信号是否成功发送 |
-w | 等待进程死亡 |
htop命令
htop跟top一样,也是打开一个实时的监控界面,直接输入htop命令打开如下图所示界面:
在上图中将输出的界面划分成了四个区域,其中: 上左区域:显示了CPU、物理内存和交换分区的信息; 上右区域:显示了任务数量、平均负载和连接运行时间等信息; 进程区域:显示出当前系统中的所有进程;这里同top显示一致
F1:显示帮助信息;
F2:配置界面中的显示信息;
F3 :搜索进程
F4:过滤器
F5:以树形方式显示
F6:排序方式
F7,F8:调整进程nice值
F9:杀死进程
F10:退出htop
lsof命令
命令 | 作用 |
---|---|
lsof | 列出当前系统打开文件 |
lsof abc.txt | 显示开启文件abc.txt的进程 |
lsof -c abc | 显示出以字母 abc 开头进程现在打开的文件 |
lsof -p | 1234 列出进程号为1234的进程所打开的文件 |
lsof -g gname/gid | 显示归属gname或gid的进程情况 |
lsof -u uname/uid | 显示归属uname或uid的进程情况 |
lsof +d /usr/local/ | 显示目录下被进程开启的文件 |
lsof +D /usr/local/ | 同上,但是会搜索目录下的目录,时间较长 |
lsof -d 4 | 显示使用fd为4的进程 |
lsof -i | 用以显示符合条件的进程情况 |
进程前后台与状态
前台进程和后台进程
前台进程:在 shell 提示处理打入命令后,创建一个子进程,运行命令, Shell 等待命令退出,然后返回到对用户给出提示符。这条命令与 Shell 异步运行,即在前台运行,用户在它完成之前不能执行别一个命令 。
后台进程:在 Shell 提示处打入命令,若后随一个 &, Shell 创建子进程运行此命令,但不等待命令退出,而直接返回到对用户给出提示。这条命令与 Shell 同步运行,即在后台运行。“后台进程必须是非交互式的” 。
进程状态在多任务处理操作系统中,每个CPU(或核心)在一个时间点上只能处理一个进程。在进程运行时,它对CPU时间和资源分配的要求会不断变化,从而为进程分配一个状态,它随着环境要求而改变。进程优先级
Linux 进程调度及多任务:每个CPU(或CPU核心)在一个时间点上只能处理一个进程,通过时间片技术,Linux实际能够运行的进程(和线程数)可以超出实际可用的CPU及核心数量。Linux内核进程调度程序将多个进程在CPU核心上快速切换,从而给用户多个进程在同时运行的印象。相对优先级 nice:由于不是每个进程都与其他进程同样重要,可告知进程调度程序为不同的进程使用不同的调度策略。常规系统上运行的大多数进程所使用的调度策略为SCHED_OTHER (也称为SCHED_NORMAL),但还有其它一些调度策略用于不同的目的。SCHED_OTHER 调度策略运行的进程的相对优先级称为进程的 nice 值,可以有40种不同级别的nice值。
nice 值越高: 表示优先级越低,例如+19,该进程容易将CPU 使用量让给其他进程。
nice 值越低: 表示优先级越高,例如-20,该进程更不倾向于让出CPU。