程序与进程:

程序:

以静态保存在硬盘、光盘等介质中能被计算机识别的可执行代码和数据。

进程:

进程是程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础,是在CPU及内存中运行的动态车程序代码,一个进程可以创建一个或多个子进程,而这个进程就是它子进程的父进程,每个进程还包含多个线程。
进程是程序的一次执行过程,是临时的,有生命期的,是动态产生,动态消亡的;任何进程都可以同其他进行一起并发执行;进程是系统进行资源分配和调度的一个独立单位;进程由程序,数据和进程控制块三部分组成。

线程:

在早期的操作系统中并没有线程的概念,进程是拥有资源和独立运行的最小单位,也是程序执行的最小单位。但是,由于计算机的发展,对CPU的要求越来越高,进程之间的切换开销较大,已经无法满足越来越复杂的程序的要求了。于是就发明了线程,线程是程序执行中一个单一的顺序控制流程,是程序执行流的最小单元,是处理器调度和分派的基本单位。

进程与线程的区别:

  • 线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位;
  • 一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线
  • 进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间(包括代码段,数据集,堆等)及一些进程级的资源(如打开文件和信号等),某进程内的线程在其他进程不可见;
  • 线程上下文切换比进程上下文切换要快得多。

以虚拟机运行为例子解释一下进程与线程的关系:

我们可以看到下图,首先咱们的电脑是由硬件组成,如:主板、CPU、内存、硬盘、显卡等;然后我们会在硬件的基础上给电脑装上一个系统,它相当于计算机的管理者,它负责任务的调度,资源的分配和管理,统领整个计算机硬件;有了系统我们才能在电脑上安装一些不同功能的应用程序。而我们用的VMware虚拟机就是一个运行程序,当我们运行虚拟机时系统就会创建相关的多个进程,而进程中又分为多个不同的线程。如图中的VIO、VPU、VMEM的便是不同的线程,而这些线程一起组成了一个进程。

CentOS 7的进程查看与控制,手工启动与调度启动(全程演示)

查看进程:

我们使用不同的查看命令所查看到的进程状态也不同。

查看静态进程:

ps命令:----------查看静态的进程统计信息

常用的命令选项组合:

1.ps aux 命令。

a:----------显示当前终端下的所有进程信息,包括其他用户的进程。

u:----------使用以用户为主的格式输出进程信息。

x:----------显示当前用户在所有终端下的进程,tty本地终端,ps/0远程终端。

CentOS 7的进程查看与控制,手工启动与调度启动(全程演示)

下面我来解释一下输出的进程信息的含义:

USER:启动该进程的用户账号名称
PID:该进程的ID号,在当前系统中是唯一的
TTY:该进程在哪个终端上运行。“?”表示未知,一般当前终端都是“?”
%CPU:该进程占用CPU的百分比
%MEM:该进程占用内存的百分比
VSZ:占用虚拟内存(swap空间)的大小
RSS:占用常驻内存(物理内存)的大小
STAT:显示了进程当前的状态,如S(可中断休眠)、s(父进程)、D(不可中断休眠)、R(运行)、l(多线性进程)Z(僵尸进程)、<(高优先级)、N(低优先级)、+(前台进程)。
START:该进程启动的时间
TIME:该进程占用CPU时间
COMMAND:启动该进程的命令的名称

2.ps -elf命令。

-e:---------显示系统内的所有进程信息。

-l:----------使用长(long)格式显示进程信息。

-f:----------使用完整的(full)格式显示进程信息。

CentOS 7的进程查看与控制,手工启动与调度启动(全程演示)

下面我来解释一下输出的进程信息的含义:

UID:该进程用户ID
PID:该进程的ID号
PPID:该进程的父进程的ID号
C:该进程的CPU占用率,以整数表示
PIR:该进程用户态的优先级
NI:该进程的内核态的优先级(数值范围-20到19)
ADDR:“-”表示进程正在运行
SZ:该进程占用swap交换分区的总量
WCHAN:该进程在内核中的名称
STIME:进程的启动时间
TTY:与进程关联的终端
TIME:进程占用CPU的累计时间
CMD:启动该进程的命令的名称

3.ps aux | grep login,ps命令用管道操作加上“grep”过滤命令可以查看指定进程的信息。

CentOS 7的进程查看与控制,手工启动与调度启动(全程演示)

查看动态进程信息:

top命令:----------查看动态的进程排名信息(3s刷新一次)

CentOS 7的进程查看与控制,手工启动与调度启动(全程演示)
下面我解释一下输出进程信息所代表的含义:

Tasks(系统任务)信息:total(总进程数),running(正在运行进程数),sleeping(休眠进程数),stopped(中止进程数),zombie(僵尸进程数)。

%CPU信息:us(用户占用),sy(内核占用),ni(优先级调度占用),id(空闲CPU),wa(I/O等待占用),hi(硬件中断占用),si(软件中断占用),st(虚拟化占用)。

KiB(单位) Mem(内存)信息:total(总内存空间),free(可使用内存),used(已用内存),buff/cache(缓存区域)
KiB(单位)Swap(交换空间)信息:total(总交换空间),free(可使用交换空间),used(已用交换空间),avail Mem(内存使用量)。

在top命令的全屏操作界面中,按[C]键根据CPU占用情况对进程列表进行排列,或按[M]键根据内存占用情况进行排列,按[N]键根据启动时间进行排序,按[h]键获得top程序的在线帮助信息,按[q]键可以退出top程序。按[k]键,然后在列表上方将会出现“PID to kill”的提示信息,根据提示输入指定进程的PID号可终止对应的进程。

查看特定进程PID:

pgrep命令:----------根据特定条件查询进程PID

常用选项:

-l:------------显示进程名
-U:----------指定特定用户
-t:-----------指定终端

CentOS 7的进程查看与控制,手工启动与调度启动(全程演示)
CentOS 7的进程查看与控制,手工启动与调度启动(全程演示)

查看进程“树”:

pstree命令:----------以树形结构列出进程信息

常用选项:

-a:----------显示详细信息
-u:----------显示进程对应的用户名
-p:----------显示进程的PID

CentOS 7的进程查看与控制,手工启动与调度启动(全程演示)

查看指定用户进程“树”,直接用命令“pstree -ap 用户名”即可。

CentOS 7的进程查看与控制,手工启动与调度启动(全程演示)

控制进程:

手工启动:

  • 前台启动:用户输入命令,直接执行程序。
  • 后台启动:当我们用前台运行执行一些运行时间较长的程序时,我们必须等待该程序执行完毕才能进行其他操作,而我们不想等待的话,就可以使用后台启动。只需在前台启动的命令行尾加上“&”符号即可。

1.当我们用前台启动复制一个较大的文件时,我们需要等待操作完成才能进行其它命令的输入。

CentOS 7的进程查看与控制,手工启动与调度启动(全程演示)

2.当我们后台启动时任然可以进行命令输入。

CentOS 7的进程查看与控制,手工启动与调度启动(全程演示)

调度启动:

at命令:----------设置一次性计划任务
格式:at ...[HH:MM]...[yyyy-mm-dd] 例如:at 18:00 2019-08-24

[Ctrl+D]键:----------------提交计划任务
atq命令:-------------------查看所有等待执行计划任务
atrm命令:-----------------删除等待执行的计划任务

1.设置一条计划任务,然后等待执行,时间到达后自动执行成功。

CentOS 7的进程查看与控制,手工启动与调度启动(全程演示)

2.设置两个计划任务,然后用“atq”命令查看,再用“atrm”命令删除一个任务。

CentOS 7的进程查看与控制,手工启动与调度启动(全程演示)

crontab命令:----------设置周期性计划任务

常用选项:

-e [-u 用户名] ----------编辑某个用户的cron服务
-l [-u 用户名]-----------列出某个用户cron服务的详细内容
-r [-u 用户名]-----------删除某个用户的所有cron服务

crontab任务配置的格式:
CentOS 7的进程查看与控制,手工启动与调度启动(全程演示)

每个字段的取值范围:

CentOS 7的进程查看与控制,手工启动与调度启动(全程演示)

时间数值的特殊表示方法:

“ * ”  :表示该范围内的任意时间
“ ,”:表示间隔的多个不连续时间点
“ - ”  :表示一个连续的时间范围
“ / ”  :指定间隔的时间频率

例子:

CentOS 7的进程查看与控制,手工启动与调度启动(全程演示)

1.编辑root用户的cron服务,不指定用户则是当前用户。

CentOS 7的进程查看与控制,手工启动与调度启动(全程演示)

2.进入cron服务编辑界面,用法与vim编辑器类似。添加一条cron任务后,“wq”保存退出。

CentOS 7的进程查看与控制,手工启动与调度启动(全程演示)

3.等到时间到了后,查看/opt/目录,zhangsan目录已经复制到/opt/目录下了。

CentOS 7的进程查看与控制,手工启动与调度启动(全程演示)

4.用“-l”选项查看cron任务列表,再用“-r”选项删除所有cron任务。

CentOS 7的进程查看与控制,手工启动与调度启动(全程演示)

进程的前后台调度:

(1)[Ctrl+Z]组合键:将当前进程挂起,即调入后台并停止执行。

CentOS 7的进程查看与控制,手工启动与调度启动(全程演示)

(2)jobs命令:查看处于后台的任务列表,结合“-l”选项可以显示PID。

CentOS 7的进程查看与控制,手工启动与调度启动(全程演示)

(3)fg命令:将后台进程恢复到前台运行,可指定任务序号。

CentOS 7的进程查看与控制,手工启动与调度启动(全程演示)

(4)bg命令:将后台停止的任务恢复运行,且继续在后台运行。

CentOS 7的进程查看与控制,手工启动与调度启动(全程演示)

终止进程的运行:

(1)[Ctrl+C]组合键:强制中断正在执行的命令

CentOS 7的进程查看与控制,手工启动与调度启动(全程演示)

(2)kill命令:用于终止指定PID号的进程,需要使用进程的PID号作为参数,结合“-9”选项可以强制终止进程。慎用,可能会导致数据丢失。

CentOS 7的进程查看与控制,手工启动与调度启动(全程演示)

(3)killall命令:用于终止指定名称的所有进程,killall命令也有“-9”选项

CentOS 7的进程查看与控制,手工启动与调度启动(全程演示)

(4)pkill命令:根据特定条件终止相应的进程

常用选项:(大部分选项与pgrep命令基本类似)

-U:-------------根据进程所属的用户名终止相应进程
-t:--------------根据进程所在的终端终止相应进程
-9:-------------强制终止进程

1.可以看到我们再终端用zhangsan用户登录。

CentOS 7的进程查看与控制,手工启动与调度启动(全程演示)

2.此时我们在远程终端用pkill命令强制关闭zhangsan用户的所有进程。

CentOS 7的进程查看与控制,手工启动与调度启动(全程演示)

3.而此时终端上的zhangsan用户已经被强制注销了。

CentOS 7的进程查看与控制,手工启动与调度启动(全程演示)