前言
Linux进程管理是一项十分重要的工作,可以帮助我们更好的控制系统。进程是程序在计算机上的一次执行活动。当你运行一个程序,你就启动了一个进程。本文介绍了常用进程操作命令以及管理
一、查看进程
-
程序:
-
保存在硬盘、光盘等介质中的可执行代码和数据 -
静态保存的代码 -
进程:
- 在CPU及内存中运行的程序代码
- 动态执行的代码
- 父、子进程
- 每个程序可以创建一个或多个进程
线程和进程的区别:
做个简单的比喻:进程=火车,线程=车厢 线程在进程下行进(单纯的车厢无法运行),一个进程可以包含多个线程(一辆火车可以有多个车厢),多个线程可共享数据(车厢是互通的)
1、查看进程信息——ps
①方法一——ps -aux
一般结合管道符号来用:ps -aux | grep httpd | wc -l
- a:显示当前终端下的所有进程信息,包括其他用户的进程,与“x”选项结合使用时将显示系统中所有的进程信息
- u:使用以用户为主的格式输出进程信息
- x:显示当前用户在所有终端下的进程信息
- 将以简单列表的形式显示出进程信息
示例:
[root@localhost ~]
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 2.6 0.3 46344 6908 ? Ss 16:47 0:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0.0 0.0 0 0 ? S 16:47 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 16:47 0:00 [kworker/0:0]
root 4 0.0 0.0 0 0 ? S< 16:47 0:00 [kworker/0:0H]
名词 | 解释 |
---|
USER | 进程的用户 | PID | 进程的ID | %CPU | 进程占用的CPU百分比 | %MEN | 占用内存的百分比 | VSZ | 该进程使用的虚拟内存量(KB) | RSS | 该进程使用的物理内存量(KB) | TTY | 启动该进程的终端名;若不是从终端启动的进程则显示为“?” | STAT | 该进程的状态(D:不可中断的休眠状态:R:正在运行状态;S:处于休眠状态,可被唤醒;T:停止状态,可能是在后台暂停或进程处于跟踪调试状态: Z:僵尸进程,进程已经中止,但是部分程序还在内存当中) | START | 该进程被触发启动时间 | TIME | 该进程实际使用CPU运行的时间 | COMMAND | 进程的启动命令 |
名词解释(僵尸进程): 已经结束了一个进程,但是它任然还占用着内存,也称之为僵死
父进程退出,子进程没有退出,那这些子进程就没有父进程去管理它们,所以就成了僵尸进程
状态后缀表示:
-D:不可被唤醒的睡眠状态,通常用于 I/O 情况。 -R:该进程正在运行。 -S:该进程处于睡眠状态,可被唤醒。 -T:停止状态,可能是在后台暂停或进程处于除错状态。 -W:内存交互状态(从 2.6 内核开始无效)。 -X:死掉的进程(应该不会出现)。 -Z:僵尸进程。进程已经中止,但是部分程序还在内存当中。 -<:高优先级(以下状态在 BSD 格式中出现)。 -N:低优先级。 -L:被锁入内存。 -s:包含子进程。 -l:多线程(小写 L)。 -+:位于后台。 -C:进程占用CPU的百分比
ctrl+c :发送 SIGINT 信号,终止一个进程 ctrl+z :发送 SIGSTOP 信号,挂起一个进程。将作业放置到后台(暂停) ctrl+d :不是发送信号,而是表示一个特殊的二进制值,表示 EOF。代表输入完成或者注销
tar -zcvf usr-tar.gz /usr/
②方法一——ps -elf
- e:显示系统内的所有进程信息
- l:使用长格式显示进程信息
- f:使用完整的格式显示进程信息
- 将以长格式显示系统中的进程信息,并且包含更丰富的内容
示例:
[root@localhost ~]
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
4 S root 1 0 0 80 0 - 32068 ep_pol 16:47 ? 00:00:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
1 S root 2 0 0 80 0 - 0 kthrea 16:47 ? 00:00:00 [kthreadd]
1 S root 4 2 0 60 -20 - 0 worker 16:47 ? 00:00:00 [kworker/0:0H]
1 S root 5 2 0 80 0 - 0 worker 16:47 ? 00:00:00 [kworker/u256:0]
名词 | 解释 |
---|
F | 内核分配给进程的系统标记 | S | 进程的状态 | UID | 启动这些进程的用户 | PID | 进程的进程ID | PPID | 父进程的进程号(如果该进程是由另一个进程启动的) | C | 进程生命周期中的CPU利用率 | PRI | 进程的优先级(越大的数字代表越低的优先级) | NI | 谦让度值用来参与决定优先级 | ADDR | 进程的内存地址 | SZ | 假如进程被换出,所需交换空间的大致大小 | WCHAN | 若该进程在睡眠,则显示睡眠中的系统函数名 | STIME | 进程启动时的系统时间 | TTY | 进程启动时的终端设备 | TIME | 运行进程需要的累计CPU时间 | CMD | 进程的启动命令 |
在CentOs7系统,tty1表示图形界面,tty2-tty6表示文字界面,可以用Ctrl+Alt+(F1-F6)切换
2、查看进程信息——top
- 使用ps命令查看到的是一个静态的进程信息,并不能连续地反馈当前进程的运行状态
- 若希望以动态刷新的方式显示各进程的状态信息则使用top
- 默认情况下每三秒刷新一次,按 s 修改刷新时间,按空格 :立即刷新
①系统任务(第一行)和进程(第二行)的信息
相关信息 | 含义 | 相关信息 | 含义 |
---|
18:55:08 | 系统时间 | Tasks | 总进程数 | up 2:07 | 系统已运行时间 | running | 正在运行的进程数 | 1 user | 当前登录用户数 | sleeping | 休眠的进程数 | load average:0.00,0.01,0.05 | 系统负载,即单位时间内系统处理的任务数,后面三个数值分别为1分钟、5分钟、15分钟到现在的平均值 | stopped | 中止的进程数 | / | / | zombie | 僵死的进程数 |
②CPU(第三行)、内存(第四行)的信息和交换空间(第五行)的相关信息
相关信息 | 含义 | 相关信息 | 含义 | 相关信息 | 含义 |
---|
us | 用户占用 | total | 总内存空间 | total | 总交换空间 | sy | 内核占用 | free | 空闲内存 | free | 空闲交换空间 | ni | 优先级调度占用 | used | 已用内存 | used | 已用交换空间 | id | 空闲CPU,要了解空闲的CPU百分比,主要看%id部分 | buff/cahe | 物理内存和交换内存的缓冲区总和 | avail Mem | 可用物理空间 | wa | I/O等待占用 | / | / | / | / | hi | 硬件中断占用 | / | / | / | / | si | 软件中断占用 | / | / | / | / | st | 虚拟化占用 | / | / | / | / |
③ 进程信息区各列详解
信息 | 解释 |
---|
PID | 进程id | USER | 进程所有者的用户名 | PR | 优先级 | NI | 谦让度值,负值表示高优先级,正值表示低优先级 | VIRT | 进程使用的虚拟内存总量,单位kb | RES | 进程使用的物理内存大小,单位kb | SHR | 共享内存大小,单位kb | S | 进程状态 | %CPU | 上次更新到现在的CPU时间占用百分比 | %MEM | 进程使用的物理内存百分比 | TIME+ | 进程使用的CPU时间总计,单位1/100秒 | COMMAND | 命令名/命令行 |
④ top常用命令
命令 | 解释 |
---|
P | 根据CPU使用百分比大小进行排序 | M | 据驻留内存大小进行排序 | N | 根据启动时间进行排序 | c | 切换显示命令名称和完整命令行 | h | 可以获得 top程序的在线帮助信息 | k | 根据提示输入指定进程的 PID 号并按 Enter 键终止对应的进程 | q | 退出 top 程序 | (数字)1 | 显示CPU个数和状态 |
若通过 top 排名工具发现某个进程 CPU 占用率非常高,需要终止该进程的运行,可以在 top 操作界面中按 k 键,然后在列表上方将会出现“PID to signal/kill [default pid = 3180]:” 的提示信息,根据提示输入指定进程的 PID 号并按 Enter 键, 出现“Send pid 5597 signal [15/sigterm]”的二次确认的提示信息,然后按Enter 键确认即可终止对应的进程
3、查看进程信息——pgrep
-l | 选项可同时输出对应的进程名以及PID |
---|
-U | 选项查询特定用户的进程 | -t | 选项查询在特定终端运行的进程 |
- 示例1:查询进程中包含‘log’的进程及PID号(若没有“-l”则只输出PID号)
[root@localhost ~]
288 xfs-log/sda2
477 xfs-log/sda1
481 xfs-log/sda5
595 systemd-logind
601 abrt-watch-log
628 abrt-watch-log
1028 rsyslogd
- 示例2:查询由用户 teacher 在 tty1 终端上运行的进程及PID号
[root@localhost ~]
4、查看进程树——pstree
- pstree命令可以输出Linux系统中各进程的树形结构,更加直观地判断出各进程之间的相互关系(如父、子进程)
-p | 选项使用时可以同时列出对应的PID号 |
---|
-u | 选项可以列出对应的用户名 | -a | 选项可以列出完整的命令信息 |
pstree -aup
二、控制进程
1、进程的启动方式
- 在Linux系统中,可以由用户手工启动或者按预定计划调度启动新的进程
①手工启动
[root@localhost ~]
[1] 4226
②调动启用
- 在服务器维护工作中,经常需要执行一些比较费时而且较占用资源的任务(如数据备份),这些任务更适合在相对空闲的时候(如半夜)进行,但这样需要用户进行事前调度安排并指定任务运行的时间
- 调度启动的计划任务进程均在后台进行,不占用用户的命令终端
- 使用”at“命令时,设置一次性计划任务,使用”crontab"命令,设置周期性计划任务
2、进程的前后台调度
①挂起当前进程
当Linux操作系统中的命令正在前台执行时(运行尚未结束),按Ctrl+Z组合键可以将当前进程挂起(调入后台并停止执行),这种操作在需要暂停当前进程并进行其他操作时特别有用。例如,打包usr并且调入后台 ,可以按 Ctrl+Z 组合键将该下载任务调入后台并暂停执行—tar zcvf usr.tar.gz /usr
②查看后台的进程
- jobs—查看当前终端中在后台运行的进程任务,结合“-l”选项可以同时显示该进程的PID号
③将后台的进程恢复运行
- bg; 将后台暂停执行的任务恢复运行并继续在后台执行
- fg:将后台暂停执行的任务恢复运行并恢复至前台运行
- 除非后台中的任务只有一个,否则bg和fg命令都需要指定后台进程的任务编号作为参数
- 例如:“fg 1(任务编号)”
3、终止进程执行
- 当用户在前台执行某个进程时,可以用Ctrl+C组合键强制中断当前正在执行的命令
- 当按 Ctrl+C 组合键无法终止程序或者需要结束在其他终端或后台运行的进程时, 可以使用专用的进程终止工具 kill、killall 和 pkill
①kill
- kill用于终止指定PID号的进程,需要使用进程的PID号作为参数
- 若该进程不响应终止信号,则结合“-9”选项可以强制终止
②killall
③pkill
- 根据进程的名称、运行该进程的用户、进程所在的终端等多种属性终止特定的进程
- 与“pgrep”命令选项类似,如“-U(指定用户名)”、“-t(指定终端)”
pgrep –l -U "xjj"
pkill -9 -U "xjj"
pgrep -l -U "xjj"
三、一次性计划任务—at
-
在 Linux 操作系统中,除了用户即时执行的命令操作以外,还可以配置在指定的时间、指定的日期执行预先计划的系统管理任务(如定期备份、定期采集监测数据)。CentOS 系统中默认已安装了 at、cronie 软件包 -
设置一次性计划时,在at命令中依次指定计划执行任务的时间、日期作为参数 -
确认后进入带“at>”提示符的任务编辑器界面,每行设置一条执行命令,可以依次设置多条语句,最后按Ctrl+D组合键提交任务 -
注:计划执行任务的时间、日期必须安排在当前系统时间之后 -
对应条件:对应系统服务为atd,必须已经运行
- “atq”命令可以进行查询,对于已经设置但还未执行(未到时间点)的计划任务,但已执行过的不会再出现在列表中
- "atrm"命令可以删除指定编号的at任务
四、周期性任务设置—crontab
1、配置文件和目录
- crond 通过多个目录和文件设置计划任务,不同类型的任务由不同的配置文件来设置
①系统任务配置文件,位于文件:/etc/crontab
- 设置的是维护Linux系统所需的任务,由Linux系统及相关程序在安装时自动设置,不建议用户修改
[root@localhost ~]
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
②系统默认的设置,位于目录:/etc/cron.*/
- 软件包crontabs安装后,会在此目录下升恒一些系统默认设置的计划任务目录,设置了系统每个小时、每一天做些什么工作
③用户定义的设置,位于文件:/var/spool/cron/
- 由用户使用crontab命令设置的cron计划会被保存在此目录中(会在此目录中生成一个与用户名相同的文件)
crond 守护进程会自动检查/etc/crontab 文件、/etc/cron.d/目录及 /var/spool/cron/目录中的改变,如果发现有配置更改,它们就会被载入内存,所以当某个 crontab 文件改变后并不需要重新启动 crond 守护进程就可以使设置生效
2、管理crontab计划任务
-u 用户名 | 指定XX用户的cron服务 |
---|
-l | 列出当前用户下的cron的详细内容 | -u zx -l | 列出zx用户下的cron的详细内容 | -r | 删除所有用户的cron内容,普通用户执行,只删除自己的cron内容 | -r -u zx | 删除zx用户的cron内容 | -e | 编辑cron服务 |
3、crontab 任务配置的格式
字段 | 说明 |
---|
分钟 | 取值为从0到59之间的任意整数 | 小时 | 取值为从0到23之间的任意整数 | 日期 | 取值为从1到31之间的任意整数 | 月份 | 取值为从1到12之间的任意整数 | 星期 | 取值为从0到7之间的任意整数,0或7代表星期日 | 命令 | 要执行的命令或程序脚本 |
背记口诀(牢记):分 时 日 月 周
4、时间数值的特殊表示方法
①特殊表示方式及示例
-
“*”表示该范围内的任意时间 -
“,”表示一个间隔内的多个不连续时间点 -
“-”表示一个连续的时间范围 -
“/”表示间隔的时间频率 示例1:
若要按固定的周期重复完成一些系统管理任务,任务内容如下:①每天早上 7:50 自动开启httpd 服务,22:50 关闭 httpd 服务;②每隔五天清空一次 FTP 服务器公共目录/var/ftp/pub 中的数据;③每周六的 7:30 重新启动系统中的 httpd 服务;④每周一、周三、周五的下午 17:30,使用 tar 命令自动备份/etc/httpd 目录,则可由 root 用户通过 crontab 设置以下计划任务
[root@localhost ~]
50 7 * * * /usr/bin/systemctl start httpd.service
50 22 * * * /usr/bin/systemctl stop httpd.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/
*/2 * * * * ls -lh /home/*
普通用户执行“crontab -e”命令时,可以设置自己的计划任务(需要注意命令的执行权限)。 例如,用户xjj 设置一条计划任务:在每周五晚上的 23:55 将/etc/passwd 文件的内容复制到宿主目录中,保存为 123.txt 文件,具体操作如下:
[xjj @localhost ~]
55 23 * * 5 /usr/bin/cp /etc/passwd /home/xjj/123.txt
②查看用户的计划任务表
crontab 命令结合“-l”选项可以查看当前用户的计划任务列表,对于 root 用户来说,还可以结合“-u”选项查看其他用户的计划任务,具体操作如下:
[root@localhost ~]
50 7 * * * /usr/bin/systemctl start httpd.service
50 22 * * * /usr/bin/systemctl stop httpd.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 ~]
55 23 * * 7 /usr/bin/cp /etc/passwd /home/xjj/123.txt
[root@localhost ~]
-rw-------. 1 root root 57 May 7 11:10 /var/spool/cron/xjj
③删除用户的计划任务表
- 当只需要删除某一条计划任务时,可以通过“crontab -e”命令进行编辑;而若要清空某个用户的所有计划任务,可以执行“crontab -r”命令
[xjj@localhost ~]$ crontab -r
[xjj@localhost ~]$ crontab -l
no crontab for xjj
总结
在生产环境中设置相应的计划任务可以按预设的周期重复执行,可以大大减轻设置重复性系统管理任务的操作
|