程序:保存在硬盘、光盘等介质中的可执行代码和数据
静态保存的代码
进程:在CPU级内存中运行的程序代码,动态、有生命周期及运行状态
动态执行的代码
父、子进程—每个程序可以创建一个或多个进程
线程:三种状态①、就绪:在创建线程后存在等待cpu过来的执行时间称为就绪状态
②、运行:当cpu过来执行时就会转变为运行状态,而当cpu去执行别的线程时就会变回就绪状态
③、阻塞:线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进入就绪状态,才有机会转到运行状态。
查看进程信息ps ps命令 方法一、常用的选项组合:ps -aux #将以简单列表的形式显示出进程信息常用的参数
-a:显示当前终端下的所有进程信息,包括其他用户的进程。与“x”选项结合时将显示系统中所有的进程信息。
-u:使用以用户为主的格式输出进程信息
-x:显示当前用户所有终端下的进程信息
显示输出信息中,个字段含义描述:
USER:启动该进程的用户账号的名称
PID:该进程在系统中的数字ID号,在当前系统中是唯一的
%CPU:CPU占用的百分比
%MEM:内存占用的百分比
VSZ:该进程使用的虚拟内存量
RSS:该进程占用的物理内存量
TTY:表明该进程在哪个终端上运行,不是从终端启动的进程则显示为?
pts是远程登录终端ctrl+ALT F1-F6 tty1 图像界面 2和6字符界面 ?系统本身执行的进程
D[aemon]:守护进程
R[uning]:正在运行
S[leep]:睡眠状态
Z[ombie]:僵尸状态
T:调试、程序执行一般停止
优先级:
<:高优先级
N:低优先级
+:前台进程
l:该进程是多线程的
s:进程是控制进程
D:系统守护进程
L:进程有页面锁定在内存中
START:启动该进程的时间
TIME:该进程占用的CPU时间
COMMAND:启动该进程的命令的名称
方法二、 ps -elf #将以长格式系统中的进程信息-e:显示系统内的所有进程信息
-l:使用长格式显示进程信息
-f:使用完整的格式显示进程信息
各列的解释:
F:内核分配给进程的系统标记
S:进程的状态
UID:启动这些进程的用户
PID:进程的进程ID
PPID:父进程的进程号
C:进程生命周期中的CPU利用率
PRI:进程的优先级
NI:谦让度值用来参与决定优先级
ADDR:进程的内存地址
SZ:假如进程被换出,所需交换空间的大致大小
WCHAN:若该进程在睡眠,则显示睡眠中的系统函数名
STIME:进程启动时的系统时间
TTY:进程启动时的终端设备
TIME:运行进程需要的累计CPU的时间
CMD:进程的启动命令
僵尸进程:一个进程结束了,但是如果该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程,因为每个进程结束的时候,系统都会扫描当前系统中所运行的所有进程,看有没有哪个进程是刚刚结束的这个进程的子进程,如果是的话,就由Init来接管它,成为它的父进程,子进程退出后init会回收其占用的相关资源。但是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将称为一个僵尸进程。
常见的状态有以下几种:
-D:不可被唤醒的睡眠状态
-R:该进程正在运行
-S:该进程处于睡眠状态,可被唤醒
-T:停止状态,可能在后台暂停或进程处于除错状态
-W:内存交互状态
-X:死掉的进程
-Z:僵尸进程
-<:高优先级
-N:低优先级
-L:被锁入内存
-s:包含子进程
-l:多线程
-+:位于后台
-C:进程占用CPU的百分比
top命令 #查看进程动态信息上述输出信息中,开头的部分显示了系统任务(Tasks)、CPU占用、内存占用(Mem)、交换空间(Swap)等汇总信息,汇总信息下方依次显示当前进程的排名情况。相关信息的含义表述如下。
uptime
13:22:30 当前时间
up 20days 系统运行时间 ,说明此服务器连续运行 20 天了
2 user 当前登录用户数
load average: 0.06, 0.60, 0.48 系统负载,即任务队列的平均长度。 三个数值分别为 1 分钟、5 分钟、15 分钟前到现在的平均值。
系统任务(Tasks)信息:total,总进程数;running,正在运行的进程数;sleeping, 休眠的进程数;stopped,中止的进程数;zombie,僵死无响应的进程数。
CPU 占用信息:us,用户占用;sy,内核占用;ni,优先级调度占用;id,空闲CPU;wa,I/O 等待占用;hi,硬件中断占用;si,软件中断占用;st,虚拟化占用。要了解空闲的 CPU 百分比,主要看%id 部分。
内存占用(Mem)信息:total,总内存空间;free,空闲内存;used,已用内存;buff/cache,物理内存和交换内存的缓冲区总和。
交换空间(Swap)占用:total,总交换空间;free,空闲交换空间;used,已用交换空间;avail Mem,可用物理空间。
top命令全屏操作界面快捷键:默认3s刷新一次,按s修改刷新时间按空格:立即刷新
P:按CPU排序
M:按内存排序
T:按时间排序
p:进程IP,查看某个进程状态
N键根据启动时间进行排序
数字键1:显示每个内核的CPU使用率
h:top程序帮助信息
q:正常退出top
pgrep命令查询进程信息常用参数:
-l:同时输出对应的进程名以及PID
-U:查询特定用户的进程
-t:查询在特定终端运行的进程
ptree命令以树形结构列出进程信息ptree命令默认情况下只显示各进程的名称
-p:可以同时列出对应的PID号
-u:列出对应的用户名
-a:列出完整的命令信息
jobs命令查看处于后台的任务列表-l:可以同时显示该进程对应的PID号
将后台的进程恢复运行:
bg命令,可以将后台中暂停执行(如按Ctrl+Z组合键挂起)的任务恢复运行,继续在后台执行操作;
fg命令,可以将后台任务重新恢复到前台运行
kill命令终止进程通过kill命令终止进程时,需要使用进程的PID号作为参数。无特定选项时,kill命令将给该进程发送终止信号并正常退出运行,若该进程已经无法响应终止信号,则可以结合“-9”选项强行终止进程。
[root@localhost ~]# pgrep -l "sshd" //查询目标进程的PID 号 5822 sshd [root@localhost ~]# kill 5822 //终止指定PID 的进程 [root@localhost ~]# pgrep -l "sshd" //确认进程已终止(查询时无结果) [root@localhost ~]# vim testfile & //打开vim 程序并挂起作为测试 [1]+ Stopped vim testfile [root@localhost ~]# jobs –l //查询目标进程的PID 号 [1]+ 7095 Stopped vim testfile [root@localhost ~]# kill 7095 //尝试正常结束进程[root@localhost ~]# jobs -l //但发现vim 进程并未退出[1]+ 7095 Stopped vim tmpfile [root@localhost ~]# kill -9 7095 //强制终止目标进程[root@localhost ~]# jobs -l //成功终止vim 进程[1]+ 2993 已 杀死 vim tmpfilekillall命令终止进程
使用killall命令可以通过进程名称来终止进程,当需要结束系统中多个相同名称的进程时,使用killall命令将更加方便,效率更高。
[root@localhost ~]# vim testfile1 & //挂起第 1 个 vim 测试进程 [1]+ Stopped vim testfile1 [root@localhost ~]# vim testfile2 & //挂起第 2 个 vim 测试进程 [2]+ Stopped vim testfile2 [root@localhost ~]# jobs -l //确认待终止的进程信息[1]- 7144 Stopped vim testfile1 [2]+ 7153 Stopped vim testfile2 [root@localhost ~]# killall -9 vim //通过进程名终止多个进程 [root@localhost ~]# jobs -l [1]- 7144 Killed vim testfile1 [2]+ 7153 Killed vim testfile2pkill命令终止进程
使用pkill命令可以根据进程的名称,运行该进程的用户、进程所在的终端等多种属性终止特定的进程。
例如,若要终止由用户 hmj 启动的进程(包括登录 Shell),可以执行以下操作。 su - hmj vim tst.txt & [root@localhost ~]# pgrep –l -U "hmj" //确认目标进程相关信息3773 bash [root@localhost ~]# pkill -9 -U "hmj" //强行终止用户hackli 的进程 [root@localhost ~]# pgrep -l -U "hmj" //确认目标进程已被终止计划任务管理at
一次性计划任务,在Linux操作系统中,除了用户即时执行的命令操作以外,还可以配置在指定的时间、指定的日期执行预先计划的系统管理任务。
例如,以下操作先通过 date 命令确认当前的系统时间,并设置在 2017 年 5 月 7 日的10:35 自动执行 以下任务:统计该时间点系统中由 root 用户运行的进程的数量,并将该数值保存到/tmp/ps.root 文件中。 at [HH:MM] [yyyy-mm-dd] 任务设置完毕后按Ctrl+D 组合键提交 例1 [root@kgc /]# date 2021年 08月 16日 星期一 16:20:58 +00 [root@kgc /]# at 16:23 2021-08-16 at> pgrep -U root | wc -l > /tmp/ps.root //任务设置完毕后按Ctrl+D 组合键提交 at>crontab周期性任务设置job 1 at Mon Aug 16 16:23:00 2021 [root@localhost ~]# cat /tmp/ps.root //等过了计划时间后验证命令结果202 例2 以下操作将设置一条计划任务,在当天的 21:30 自动关闭当前系统。 [root@localhost ~]# at 21:30 at> shutdown -h now at> 对于已经设置但还未执行(未到时间点)的计划任务,可以通过 atq 命令进行查询。但已执行过的 at 任务将不会再出现在列表中。具体操作如下: [root@localhost ~]# atq 2 Sun May 7 21:30:00 2017 a root 若要删除指定编号的 at 任务,可以使用 atrm 命令。删除后的 at 任务将不会被执行, 并且不会显示在 atq 命令的显示结果中,但已经执行过的任务无法删除。具体操作如下: [root@localhost ~]# atrm 2 //删除第 2 条 at 计划任务 [root@localhost ~]# atq //确认第 2 条任务已被删除
crond通过多个目录和文件设置计划任务,不同类型的任务由不同的配置文件来设置
1、/etc/crontab----系统任务配置文件
/etc/crontab文件中设置的是维护Linux操作系统所需的任务,Linux操作系统及相关程序在安装时可自动设置,不建议用户手动修改此文件。
例如,该文件中包括设置 Shell 环境、可执行路径等变量的操作,以及每小时、每天、每周、每月需要执行的任务目录。执行如下的“cat /etc/crontab ”命令可以查看/etc/crontab 文件的具体内容 [root@localhost ~]# cat /etc/crontab SHELL=/bin/bash //设置执行计划任务的Shell 环境 PATH=/sbin:/bin:/usr/sbin:/usr/bin //定义可执行命令及程序的路径 MAILTO=root //将任务输出信息发送到指定用户的邮箱
根据/etc/crontab 配置文件中的设定,crond 将按照不同的周期重复执行相应目录中的任务脚本文件。
2、/var/spool/cron/------用户cron任务的配置文件存放目录
由用户自行设置的cron计划任务将保存到目录/var/spool/中,文件名与用户名相同。
例如,通过如下操作可以得知,root 用户的 cron 计划任务保存在配置文件/var/spool/cron/root 中。 [root@localhost ~]# ls -l /var/spool/cron2 * * * #每隔两个小时执行
| 执行周期 | 配置说明 |
|---|---|
| 分钟 | 从0到59之间的整数 |
| 小时 | 从0到23之间的整数 |
| 日期 | 从1到31之间的整数 |
| 月份 | 从1到12之间的整数 |
| 星期 | 从0到7之间的整数,0或7代表星期日 |
* :匹配范围内任意时间
, :分隔多个不连续的时间
- :指定连续时间范围
/n :指定时间频率,每n
查看用户的计划任务列表crontab 命令结合“-l”选项可以查看当前用户的计划任务列表,对于 root 用户来说, 还可以结合“-u”选项查看其他用户的计划任务,具体操作如下: [root@localhost ~]# crontab –l //查看用户root 自己的计划任务 50 7 * * * /usr/bin/systemctl start sshd.service 50 22 * * * /usr/bin/systemctl stop sshd.servic 0 0 */5 * * /usr/bin/rm -rf /var/ftp/pub/* 30 7 * * 6 /usr/bin/systemctl httpd restart 30 17 * * 1,3,5 /usr/bin/tar jcf httpdconf.tar.bz2 /etc/httpd/ [root@localhost ~]# crontab -l -u jerry //查看用户jerry 的计划任务 55 23 * * 7 /usr/bin/cp /etc/passwd /home/jerry/pwd.txt [root@localhost ~]# ls -l /var/spool/cron/jerry -rw-------. 1 root root 57 May 7 11:10 /var/spool/cron/jerry删除用户的计划任务列表
当只需要删除某一条计划任务时,可以通过“crontab -e”命令进行编辑;而若要清 空某个用户的所有计划任务,可以执行“crontab -r”命令。 [jerry@localhost ~]$ crontab -r //用户jerry 清空自己设置的计划任务 [jerry@localhost ~]$ crontab -l no crontab for jerry



