一、linux系统进程
在linux系统中,操作系统是通过进程去完成一个一个的任务,进程是管理事务的基本单元。进程拥有自己独立的处理环境(如:当前需要用到哪些环境变量,程序运行的目录在哪,当前是哪个用户在运行此程序等)和系统资源(如:处理器 CPU 占用率、存储器、I/O设备、数据、程序)。
当你在linux系统中执行一个程序时,系统会为这个程序创建特定的环境。这个环境包含系统运行这个程序所需的任何东西。
每当你在linux中执行一个命令,它都会创建,或启动一个新的进程。比如,当你尝试运行命令“ls -l”来列出目录的内容时,你就启动了一个进程。如果有两个终端窗口显示在屏幕上,那么你可能运行了两次同样的终端程序,这时会有两个终端进程。
每个终端窗口可能都运行了一个Shell,每个运行的Shell都分别是一个进程。当你从Shell调用一个命令时,对应的程序就会在一个新进程中执行,当这个程序的进程执行完成后,Shell 的进程将恢复运行。
操作系统通过被称为PID或进程ID的数字编码来追踪进程。系统中的每一个进程都有一个唯一的PID。
二、进程的状态
每个 Linux 进程都有它自己的生命周期,比如,创建、执行、结束和清除。每个进程也都有各自的状态,显示进程中当前正发生什么。进程的状态是变化的,其包括进程的创建、调度和消亡。
进程可以有如下几种状态:
-
D(不可中断休眠状态)——进程正在休眠并且不能恢复,直到一个事件发生为止。
-
R(运行状态)——进程正在运行。
-
S(休眠状态)——进程没有在运行,而在等待一个事件或是信号。
-
T(停止状态)——进程被信号停止,比如,信号 SIGINT 或 SIGSTOP。
-
Z(僵死状态)——标记为 <defunct> 的进程是僵死的进程,它们之所以残留是因为它们的父进程适当地销毁它们。如果父进程退出,这些进程将被 init 进程销毁。
三、进程管理相关命令
1、ps命令
ps 即 process state,可以查看进程当前状态的快照,默认显示当前终端中的进程,Linux系统各进程的相关信息均保存在/proc/数字 目录/status 下的各文件中
- "ps aux" 可以查看系统中所有的进程;
- "ps -le" 可以查看系统中所有的进程,而且还能看到进程的父进程的 PID 和进程优先级。
常用选项
- a:显示当前终端下的所有进程信息,包括其他用户的进程。与“x”选项结合时将示系统中所有的进程信息。
- u:使用以用户为主的格式输出进程信息。
- x:显示当前用户在所有终端下的进程信息。
- -e:显示系统内的所有进程信息。
- -l:使用长(Long)格式显示进程信息。
- -f:使用完整的(Full)格式显示进程信
- k|--sort 属性 对属性排序,属性前加 - 表示倒序
- o 属性… 选项显示定制的信息 pid、cmd、%cpu、%mem
表头含义
- 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-------进程状态
- START-------该进程的启动时间
- TIME-------该进程占用CPU的运算时间,注意不是系统时间
- COMMAND-------产生此进程的命令名
表头含义
- F-------进程标志,说明进程的权限,常见的标志有两个: 1:进程可以被复制,但是不能被执行;4:进程使用超级用户权限
- S-------进程状态。具体的状态和"psaux"命令中的STAT状态一致
- UID-------运行此进程的用户的ID
- PID-------进程的ID
- PPID-------父进程的ID
- C-------该进程的CPU使用率,单位是百分比
- PRI-------进程的优先级,数值越小,该进程的优先级越高,越早被CPU执行;系统定义不可以人为修改
- NI-------进程的优先级,数值越小,该进程越早被执行;可以人为修改
- ADDR-------该进程在内存的哪个位置
- SZ-------该进程占用多大内存
- WCHAN-------该进程是否运行。"-"代表正在运行
- TTY-------该进程由哪个终端产生
- TIME-------该进程占用 CPU 的运算时间,注意不是系统时间
- CMD-------产生此进程的命令名
2、top命令
top命令是linux下常用的系统资源占用查看及性能分析工具,能够实时显示系统中各个进程的资源(比如cpu、内存的使用)占用状况,top命令的执行结果是一个动态显示过程,即可以通过用户按键来不断刷新当前状态。
常用选项
- -d-------指定刷新时间间隔,默认为3秒
- -b-------全部显示所有进程
- -n-------刷新多少次后退出
第一行:任务队列信息
- 18:12:01-------系统当前时间
- up 1:36-------运行时间
- 2 user-------登陆终端数
- load average:0.00,0.01,0.05-------系统负载(三个数值分别为 1 分钟、5 分钟、15 分钟内的平均值,数值越小意味着负载越低)
第二行:进程信息
- Tasks:169 total-------进程总数
- 1 running-------运行中的进程总数
- 168 sleeping-------睡眠中的进程数
- 0 stopped-------停止的进程数
- 0 zombie-------僵尸的进程数
第三行:cpu信息
- %Cpu(s):0.3 us-------用户占用资源百分比
- 0.3 sy-------系统内核占用资源百分比
- 0.0 ni-------改变过优先级的进程资源百分比
- 99.3 id-------空闲的资源百分比
- 0.0 wa-------等待输入输出的cpu时间百分比
- 0.0 hi-------硬中断占用的cpu百分比
- 0.0 si-------软中断占用的cpu百分比
- 0.0 st-------用于虚拟cpu的使用情况
第四行:物理内存信息
- Kib Mem:1867024 total-------物理内存总量(单位KB)
- 576096 free-------内存空闲量
- 681152 used-------内存使用量
- 609776 buff/cache-------作为内核缓存的内存量
第五行:虚拟内存信息
- Kib Swap:4194300 total-------虚拟内存总量
- 4194300 free-------虚拟内存空闲量
- 0 used-------虚拟内存使用量
- 957368 avail Mem-------已被提前加载的内存量
第六行:具体的系统进程的资源使用的详细情况
- PID-------进程ID
- USER-------进程所有者的用户名
- PR-------优先级
- NI-------nice值(负值表示搞优先级,正值表示低优先级)
- VIRT-------进程使用的虚拟内存总量(KB)
- RES-------进程使用的未被换出的物理内存大小(KB)
- SHR-------共享内存大小(KB)
- S-------进程状态
- %CPU-------进程上次更新到现在的CPU时间占用百分比
- %MEM-------物理内存占比
- TIME+-------进程使用的CPU时间总计(单位1/100秒)
- COMMAND-------命令名。默认各进程是按照CPU的占用量来排序的
3、pgrep命令
查看指定的进程
- -U-------指定用户
- -l-------显示进程名
- -a-------显示完整格式的进程名
- -P pid-------显示指定进程的子进程
4、pstree命令
以树形结构列出进程信息
- -a-------显示启动每个进程对应的完整指令,包括启动进程的路径、参数等
- -p-------显示PID
- -T-------不显示线程thread,默认显示线程
- -u-------显示用户切换
- -H-------pid 高亮显示指定进程及其前辈进程
5、lsof命令
“list opened files”的缩写,直译过来,就是列举系统中已经被打开的文件。通过 lsof 命令,我们就可以根据文件找到对应的进程信息,也可以根据进程信息找到进程打开的文件。
- -c 字符串-------只列出以字符串开头的进程打开的文件
- +d 目录名-------目录名列出某个目录中所有被进程调用的文件
- -u 用户名-------用户名只列出某个用户的进程打开的文件
- -p pid-------列出某个 PID 进程打开的文件
6、vmstat命令
vmstat命令,是 Virtual Meomory Statistics(虚拟内存统计)的缩写,可用来监控 CPU 使用、进程状态、内存使用、虚拟内存使用、硬盘输入/输出状态等信息。
- -fs-------f:显示从启动到目前为止,系统复制(fork)的程序数,此信息是从 /proc/stat 中的processes字段中取得的。 -s:将从启动到目前为止,由一些事件导致的内存变化情况列表说明
- -S------单位令输出的数据显示单位,例如用 K/M 取代bytes的容量
- -d------列出硬盘有关读写总量的统计表
- -p 分区设备文件名------分区设备文件名查看硬盘分区的读写情况
7、kill命令
kill 命令会向操作系统内核发送一个信号(多是终止信号)和目标进程的 PID,然后系统内核根据收到的信号类型,对指定进程进行相应的操作。kill 命令是按照 PID 来确定进程的,所以 kill 命令只能识别 PID,而不能识别进程名。Linux 定义了几十种不同类型的信号,读者可以使用 kill -l 命令查看所有信号及其编号,这里仅列出几个常用的信号。
- 0-------程序退出时收到该信息
- 1-------挂掉电话线或终端连接的挂起信号,这个信号也会造成某些进程在没有终止的情况下重新初始化
- 2-------表示结束进程,但并不是强制性的,常用的 "Ctrl+C" 组合键发出就是一个 kill -2 的信号
- 3-------退出
- 9-------杀死进程,即强制结束进程
- 11-------段错误
- 15-------正常结束进程,是kill 命令的默认信号
8、killall命令
killall 也是用于关闭进程的一个命令,但和 kill 不同的是,killall 命令不再依靠 PID 来杀死单个进程,而是通过程序的进程名来杀死一类进程,也正是由于这一点,该命令常与 ps、pstree 等命令配合使用。
用法:killall [选项] [信号] 进程名
- -i-------交互式,询问是否要杀死某个进程
- -l-------忽略进程名的大小写
四、计划任务
1、at一次性任务设置
2、crontab周期性任务设置
用法:crontab [选项] [file]
- -e-------编辑计划任务列表
- -u-------指定所管理的计划任务属于哪个用户,默认针对当前用户、一般只有root用户有权限设置
- -l-------列表显示任务计划
- -r-------删除任务计划列表
# 定义示例:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
6 个选项都不能为空,必须填写。如果不确定,则使用“*”代表任意时间