Linux系统的进程和计划任务

文章目录

  • 进程和计划任务
    • 1程序
      • 1.1什么是程序
    • 2进程
      • 2.1什么是进程
      • 2.2进程具有的特征:
    • 线程
    • 3进程管理相关命令
      • 3.1ps命令
      • 3.2top命令
        • 3.2.1第一部分
        • 3.2.2第二部分
      • 3.3pgrep命令
      • 3.4pstree命令
      • 3.5 lsof
      • 3.6监控系统资源vmstat
    • 4进程启动方式
      • 4.1手动启动
        • "命令 &",把命令放入后台执行
      • 4.2 结束进程
        • 4.2.1 kill
        • 4.2.2 killall
        • 4.2.3pkill
    • 5一次性任务
      • 5.1at
      • 5.2 crontab

进程和计划任务

内核功用:进程管理、内存管理、文件系统、网络功能、驱动程序、安全功能等

Linux系统的进程和计划任务_第1张图片

1程序

1.1什么是程序

  • 是一组计算机能识别和执行的指令,运行于电子计算机上,满足人们某种需求的信息化工具
  • 用于描述进程要完成的功能,是控制进程执行的指令集

2进程

2.1什么是进程

运行中的程序的一个副本,是被载入内存的一个指令集合,是资源分配的单位

  • 进程ID(Process ID,PID)号码被用来标记各个进程
  • UID、GID、和SELinux语境决定对文件系统的存取和访问权限
  • 通常从执行进程的用户来继承
  • 存在生命周期
  • 都由其父进程创建

2.2进程具有的特征:

  • 动态性:进程是程序的一次执行过程,是临时的,有生命期的,是动态产生,动态消亡的;
  • 并发性:任何进程都可以同其他进程一起并发执行;
  • 独立性:进程是系统进行资源分配和调度的一个独立单位;
  • 结构性:进程由程序、数据和进程控制块三部分组成。

僵尸’进程:
一个进程结束了,但是如果该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程,因为每个进程结束的时候,系统都会扫描当前系统中所运行的所有进程,看有没有哪个进程是刚刚结束的这个进程的子进程,如果是的话,就由Init来接管它,成为它的父进程,子进程退出后init会回收其占用的相关资源。但是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵厂进程。

父进程退出 子进程没有退出 那么这些子进程就没有父进程来管理了, 就变成僵尸进程

子进程已经结束了,父进程没有意识到,

线程

在早期的操作系统中并没有线程的概念,进程是能拥有资源和独立运行的最小单位,也是程序执行的最小单
位。任务调度采用的是时间片轮转的抢占式调度方式,而进程是任务调度的最小单位,每个进程有各自独立的
一块内存,使得各个进程之间内存地址相互隔离。
后来,随着计算机的发展,对CPU的要求越来越高,进程之间的切换开销较大,已经无法满足越来越复杂的程
序的要求了。于是就发明了线程。
线程是程序执行中一个单一的顺序控制流程,是程序执行流的最小单元,是处理器调度和分派的基本单位。一
个进程可以有一个或多个线程,各个线程之间共享程序的内存空间(也就是所在进程的内存空间)。一个标准的
线程由线程ID、当前指令指针(PC)、寄存器和堆栈组成。而进程由内存空间(代码、数据、进程空间、打开的
文件)和一个或多个线程组成。


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

Linux系统的进程和计划任务_第2张图片

3进程管理相关命令

进程的管理主要是指进程的关闭与重启。我们一般关闭或重启软件,都是关闭或重启它的程序,而不是直接操作进程的。比如,要重启 apache 服务,一般使用命令"service httpd restart"重启 apache的程序。systemctl httpd start

那么,可以通过直接管理进程来关闭或重启 apache 吗?答案是肯定的,这时就要依赖进程的信号(Signal)了。我们需要给予该进程 信号,告诉进程我们想要让它做什么。

系统中可以识别的信号较多,我们可以使用命令"kill -l"或"man 7 signal"来查询

号代号 信号名称 说 明
1 SIGHUP 该信号让进程立即关闭.然后重新读取配置文件之后重启
2 SIGINT 程序中止信号,用于中止前台进程。相当于输出 Ctrl+C 快捷键
3 SIGQUIT 退出
8 SIGFPE 在发生致命的算术运算错误时发出。不仅包括浮点运算错误,还包括溢出及除数为 0 等其他所有的算术运算错误
9 SIGKILL 用来立即结束程序的运行。本信号不能被阻塞、处理和忽略。般用于强制中止进程
14 SIGALRM 时钟定时信号,计算的是实际的时间或时钟时间。alarm 函数使用该信号
15 SIGTERM 正常结束进程的信号,kill 命令的默认信号。如果进程已经发生了问题,那么这 个信号是无法正常中止进程的,这时我们才会尝试 SIGKILL 信号,也就是信号 9
18 SIGCONT 该信号可以让暂停的进程恢复执行。本信号不能被阻断
19 SIGSTOP 该信号可以暂停前台进程,相当于输入 Ctrl+Z 快捷键。本信号不能被阻断

3.1ps命令

ps 即 process state,可以进程当前状态的快照,默认显示当前终端中的进程,Linux系统各进程的相关信息均保存在/proc/数字 目录下的各文件中

查看静态的进程统计信息

支持三种选项:

  1. UNIX选项 如: -A -e
  2. GNU选项 如: --help
  3. BSD选项 如: a
  • “ps aux” 可以查看系统中所有的进程;
  • “ps -le” 可以查看系统中所有的进程,而且还能看到进程的父进程的 PID 和进程优先级;
  • “ps -l” 只能看到当前 Shell 产生的进程;

常用选项

  • a:显示当前终端下的所有进程信息,包括其他用户的进程。与“x”选项结合时将示系统中所有的进程信息。
  • u:使用以用户为主的格式输出进程信息。
  • x:显示当前用户在所有终端下的进程信息。
  • -e:显示系统内的所有进程信息。
  • -l:使用长(Long)格式显示进程信息。
  • -f:使用完整的(Full)格式显示进程信
  • k|–sort 属性 对属性排序,属性前加 - 表示倒序
ps aux
表头 含义
USER 该进程是由哪个用户产生的。
PID 进程的 ID。
%CPU 该进程占用 CPU 资源的百分比,占用的百分比越高,进程越耗费资源。
%MEM 该进程占用物理内存的百分比,占用的百分比越高,进程越耗费资源。
VSZ 该进程占用虚拟内存的大小,单位为 KB。
RSS 该进程占用实际物理内存的大小,单位为 KB。
TTY 该进程是在哪个终端运行的。其中,tty1 ~ tty7 代表本地控制台终端(可以通过 Alt+F1 ~ F7 快捷键切换不同的终端),tty1~tty6 是本地的字符界面终端,tty7 是图形终端。pts/0 ~ 255 代表虚拟终端,一般是远程连接的终端,第一个远程连接占用 pts/0,第二个远程连接占用 pts/1,依次増长。
STAT 进程状态。常见的状态有以下几种: -D:不可被唤醒的睡眠状态,通常用于 I/O 情况。
-R:该进程正在运行。
-S:该进程处于睡眠状态,可被唤醒。
-T:停止状态,可能是在后台暂停或进程处于除错状态。
-W:内存交互状态(从 2.6 内核开始无效)。
-X:死掉的进程(应该不会出现)。
-Z:僵尸进程。进程已经中止,但是还是占用硬件资源。
-<:高优先级(以下状态在 BSD 格式中出现)。
-N:低优先级。
-L:被锁入内存。
-s:包含子进程。
-l:多线程(小写 L)。
-+:位于后台。
START 该进程的启动时间。
TIME 该进程占用 CPU 的运算时间,注意不是系统时间。
COMMAND 产生此进程的命令名。
ps -le 命令输出信息
表头 含义
F 进程标志,说明进程的权限,常见的标志有两个: 1:进程可以被复制,但是不能被执行;4:进程使用超级用户权限;
S 进程状态。具体的状态和"psaux"命令中的 STAT 状态一致;
UID 运行此进程的用户的 ID;
PID 进程的 ID;
PPID 父进程的 ID;
C 该进程的 CPU 使用率,单位是百分比;
PRI 进程的优先级,数值越小,该进程的优先级越高,越早被 CPU 执行;系统定义不可以人为修改
NI 进程的优先级,数值越小,该进程越早被执行;可以人为修改
ADDR 该进程在内存的哪个位置;
SZ 该进程占用多大内存;
WCHAN 该进程是否运行。"-"代表正在运行;
TTY 该进程由哪个终端产生;
TIME 该进程占用 CPU 的运算时间,注意不是系统时间;
CMD 产生此进程的命令名;

如果不想看到所有的进程,只想查看一下当前登录产生了哪些进程,那只需使用 “ps -l” 命令就足够了:

Linux 是一个多用户、多任务的操作系统,系统中通常运行着非常多的进程。但是 CPU 在一个时钟周期内只能运算一条指令(现在的 CPU 采用了多线程、多核心技术,所以在一个时钟周期内可以运算多条指令。 但是同时运算的指令数也远远小于系统中的进程总数),那问题来了:谁应该先运算,谁应该后运算呢?这就需要由进程的优先级来决定了。

另外,CPU 在运算数据时,不是把一个集成算完成,再进行下一个进程的运算,而是先运算进程 1,再运算进程 2,接下来运算进程 3,然后再运算进程 1,直到进程任务结束。不仅如此,由于进程优先级的存在,进程并不是依次运算的,而是哪个进程的优先级高,哪个进程会在一次运算循环中被更多次地运算。

这样说很难理解,我们换一种说法。假设我现在有 4 个孩子(进程)需要喂饭(运算),我更喜欢孩子 1(进程 1 优先级更高),孩子 2、孩子 3 和孩子 4 一视同仁(进程 2、进程 3 和进程 4 的优先级一致)。现在我开始喂饭了,我不能先把孩子 1 喂饱,再喂其他的孩子,而是需要循环喂饭(CPU 运算时所有进程循环运算)。那么,我在喂饭时(运算),会先喂孩子 1 一口饭,然后再去喂其他孩子。而且在一次循环中,先喂孩子 1 两口饭,因为我更喜欢孩子 1(优先级高),而喂其他的孩子一口饭。这样,孩子 1 会先吃饱(进程 1 运算得更快),因为我更喜欢孩子 1。

在 Linux 系统中,表示进程优先级的有两个参数:Priority 和 Nice

其中,PRI 代表 Priority,NI 代表 Nice。这两个值都表示优先级,数值越小代表该进程越优先被 CPU 处理。不过,PRI值是由内核动态调整的,用户不能直接修改。所以我们只能通过修改 NI 值来影响 PRI 值,间接地调整进程优先级。

PRI 和 NI 的关系如下:

PRI (最终值) = PRI (原始值) + NI

其实,大家只需要记得,我们修改 NI 的值就可以改变进程的优先级即可。NI 值越小,进程的 PRI 就会降低,该进程就越优先被 CPU 处理;反之,NI 值越大,进程的 PRI 值就会増加,该进程就越靠后被 CPU 处理。

修改 NI 值时有几个注意事项:

  • NI 范围是 -20~19。
  • 普通用户调整 NI 值的范围是 0~19,而且只能调整自己的进程。
  • 普通用户只能调高 NI 值,而不能降低。如原本 NI 值为 0,则只能调整为大于 0。
  • 只有 root 用户才能设定进程 NI 值为负值,而且可以调整任何用户的进程。
#查看进程的特定属性
ps axo pid,cmd,%mem,%cpu




#排序,查找占用最多内存和CPU的进程
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head
#按内存倒序排序
ps axo pid,cmd,%cpu,%mem --sort %mem

查看进程信息 prtstat
#prtstat 18395

3.2top命令

ps 命令可以一次性给出当前系统中进程状态,但使用此方式得到的信息缺乏时效性,并且,如果管理员需要实时监控进程运行情况,就必须不停地执行 ps 命令,这显然是缺乏效率的。

为此,Linux 提供了 top 命令。top 命令可以动态地持续监听进程地运行状态,与此同时,该命令还提供了一个交互界面,用户可以根据需要,人性化地定制自己的输出,进而更清楚地了进程的运行状态。

选项:

  • -d 秒数:指定 top 命令每隔几秒更新。默认是 3 秒;
  • -b:使用批处理模式输出。一般和"-n"选项合用,用于把 top 命令重定向到文件中;
  • -n 次数:指定 top 命令执行的次数。一般和"-"选项合用;
  • -p 进程PID:仅查看指定 ID 的进程;
  • -s:使 top 命令在安全模式中运行,避免在交互模式中出现错误;
  • -u 用户名:只监听某个用户的进程;

在 top 命令的显示窗口中,还可以使用如下按键,进行一下交互操作:

  • ? 或 h:显示交互模式的帮助;
  • c:按照 CPU 的使用率排序,默认就是此选项;
  • M:按照内存的使用率排序;
  • N:按照 PID 排序;
  • T:按照 CPU 的累积运算时间排序,也就是按照 TIME+ 项排序;
  • k:按照 PID 给予某个进程一个信号。一般用于中止某个进程,信号 9 是强制中止的信号;
  • r:按照 PID 给某个进程重设优先级(Nice)值;
  • q:退出 top 命令;

top 命令的输出内容是动态的,默认每隔 3 秒刷新一次。命令的输出主要分为两部分:

  1. 第一部分是前五行,显示的是整个系统的资源使用状况,我们就是通过这些输出来判断服务器的资源使用状态的;
  2. 第二部分从第六行开始,显示的是系统中进程的信息;
3.2.1第一部分

top - 10:06:37 up 5:36, 3 users, load average: 0.00, 0.01, 0.05
Tasks: 204 total, 1 running, 202 sleeping, 1 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1867048 total, 74348 free, 755112 used, 1037588 buff/cache
KiB Swap: 4194300 total, 4191856 free, 2444 used. 878688 avail Mem

第一行为任务队列信息,具体内容如表 所示。

内 容 说 明
12:26:46 系统当前时间
up 1 day, 13:32 系统的运行时间.本机己经运行 1 天 13 小时 32 分钟
2 users 当前登录了两个用户
load average: 0.00,0.00,0.00 系统在之前 1 分钟、5 分钟、15 分钟的平均负载。如果 CPU 是单核的,则这个数值超过 1 就是高负载:如果 CPU 是四核的,则这个数值超过 4 就是高负载 (这个平均负载完全是依据个人经验来进行判断的,一般认为不应该超过服务器 CPU 的核数)

第二行为进程信息,具体内容如表

内 容 说 明
Tasks: 95 total 系统中的进程总数
1 running 正在运行的进程数
94 sleeping 睡眠的进程数
0 stopped 正在停止的进程数
0 zombie 僵尸进程数。如果不是 0,则需要手工检查僵尸进程

第三行为 CPU 信息,具体内容如表

内 容 说 明
Cpu(s): 0.1 %us 用户模式占用的 CPU 百分比
0.1%sy 系统模式占用的 CPU 百分比
0.0%ni 改变过优先级的用户进程占用的 CPU 百分比
99.7%id 空闲 CPU 占用的 CPU 百分比
0.1%wa 等待输入/输出的进程占用的 CPU 百分比
0.0%hi 硬中断请求服务占用的 CPU 百分比
0.1%si 软中断请求服务占用的 CPU 百分比
0.0%st st(steal time)意为虚拟时间百分比,就是当有虚拟机时,虚拟 CPU 等待实际 CPU 的时间百分比

第四行为物理内存信息,具体内容如表buff cache

内 容 说 明
Mem: 625344k total 物理内存的总量,单位为KB
571504k used 己经使用的物理内存数量
53840k&ee 空闲的物理内存数量。我们使用的是虚拟机,共分配了 628MB内存,所以只有53MB的空闲内存
65800k buffers 作为缓冲的内存数量

第五行为交换分区(swap)信息,如表

内 容 说 明
Swap: 524280k total 交换分区(虚拟内存)的总大小
Ok used 已经使用的交换分区的大小
524280k free 空闲交换分区的大小
409280k cached 作为缓存的交换分区的大小

通过 top 命令的第一部分就可以判断服务器的健康状态。如果 1 分钟、5 分钟、15 分钟的平均负载高于 1

你可能感兴趣的:(linux,centos,运维)