目录
一.程序和进程的关系
程序
进程
线程
线程与进程的区别
二.查看进程信息ps
方法一
常用选项
方法二
三.TOP动态查看进程信息
进程信息区各列解释
top常用命令
系统查看命令总结
查看进程信息pgrep
查看进程树pstree
四.控制进程
进程的启动方式
进程的前后台调度
终止进程的运行
终止进程的运行pkill
查看终端信息的命令(who、w、ps aux)
五.计划任务管理
一次性计划任务
周期性计划任务
crontab命令
实列
一.程序和进程的关系
程序
- 保存在硬盘、光盘等介质中的可执行代码和数据文件中静态保存的代码
进程
- 在CPU及内存中运行的程序代码·动态执行的代码
- 父、子进程
- 每个程序可以创建一个或多个进程
线程
- 指在一个进程中执行的一个单一线性流程
- 一个进程可以包含多个线程,这些线程可以并发执行,同时共享进程的资源,每个线程都有自己的程序计数器、堆栈和局部变量,但它们共享全局变量和静态变量
- 是操作系统(或者在用户空间的线程库)所管理的最小执行单元,它能独立运行、调度和管理资源
- 在多线程系统中,多个线程可以同时运行,从而实现并发执行,提高系统的效率和利用率。同时,由于线程可以共享相同的内存空间
- 线程间的通信和同步较为方便。
线程与进程的区别
- 进程是程序的一次执行,"它是资源分配和管。理的基本单位,包括代码、数据、堆栈、文件句柄等。
- 线程是进程中的一个执行流程,是CPU调度的基本单位,共享进程的资源,包括内存、文件和其他系统资源。
- 进程之间通常是相互独立的,每个进程有独立的内存空间,通过进程间通信(IPC)来实现数据共享和通信。
- 线程之间共享相同的地址空间和其他进程资源,线程之间的数据共享和通信更为方便
二.查看进程信息ps
方法一
ps aux
常用选项
- a:显示现行终端下的所有进程,包括其它用户的进程。
- u:显示进程的归属用户及内存的使用情况。
- x:显示所有终端的进程。
- h:不显示标题列。
-
[root@localhost ~]# ps aux USER PID %CPU %MEM VSZ RSS 进程用户 进程的id CPU百分比 内存的百分比 虚拟内存量 实际物理内存量TTY STAT START TIME COMMAND启动进程的终端名 该进程的状态 启动时间 实际使用CPU的时间 进程的名称与参数。root 2 0.0 0.0 0 0 ? S 09:41 0:00 [kthreadd]
各列的解释:
USER | 进程的用户 |
PID | 进程的ID |
%CPU | 进程占用的CPU百分比,占用越高,进程越耗费资源 |
%MEM | 占用内存的百分比 |
VSZ | 该进程使用的虚拟内存量(KB) |
RSS | 该进程占用的实际物理内存量(KB) |
TTY | 启动进程的终端名。不是从终端启动的进程则显示为 ? |
STAT | 该进程的状态 D:不可中断的休眠状态; R:正在运行状态; S:处于休眠状态,可被唤醒; T:停止状态,可能是在后台暂停或进程处于跟踪调试状态;Z:僵尸进程,进程已经中止,但是部分程序还在内存当中 |
START | 该进程被启动时间 |
TIME | 该进程实际使用CPU的时间 |
COMMAND | 进程的名称与参数 |
方法二
ps -elf
常用选项
- -e:显示系统内的所有进程信息。
- -l:使用长格式显示进程信息。
- -f:使用完整的格式显示进程信息。
- -a:显示现行终端下的所有进程。
- -T:查看线程信息。
- -C <进程名称>:显示指定进程名的信息。
- -p <进程pid>:显示指定pid的进程的信息。
- -H:显示树状结构,表示进程间的相互关系。
- --no-headers:不显示标题列
-
[root@localhost ~]# ps -elf F S UID PID 内核分配给进程的系统标记 进程的状态 启动这些进程的用户 进程的进程ID PPID C PRI NI 父进程的进程号 进程生命周期中的CPU利用率 进程的优先级 谦让度值用来参与决定优先级 ADDR SZ WCHAN 进程的内存地址 假如进程被换出,所需交换空间的大致大小 若该进程在睡眠,则显示睡眠中的系统函数名 STIME TTY TIME CMD 进程启动时的系统时间 进程启动时的终端设备 运行进程需 要的累计CPU时间 进程的启动命令1 S root 2 0 0 80 0 - 0 kthrea 09:41 ? 00:00:00 [kthreadd]
各列的解释
-
F 内核分配给进程的系统标记 S 进程的状态 UID 启动这些进程的用户 PID 进程的进程ID PPID 父进程的进程号(如果该进程是由另一个进程启动的) C 进程生命周期中的CPU利用率 PRI 进程的优先级(越大的数字代表越低的优先级) NI 谦让度值用来参与决定优先级 ADDR 进程的内存地址 SZ 假如进程被换出,所需交换空间的大致大小 WCHAN 若该进程在睡眠,则显示睡眠中的系统函数名 STIME 进程启动时的系统时间 TTY 进程启动时的终端设备 TIME 运行进程需要的累计CPU时间 CMD 进程的启动命令
ps -aT 显示所有线程
ps -T -p <pid> 查看指定进程中已经起的线程
ps -L <pid> 查看指定进程中的线程信息
ps aux --sort -%cpu | head -10 按cpu降序排列,-为降序,+为升序,p与%同义
ps aux --sort +pmem | head -n 10 按内存升序排列
ps aux --sort -pcpu,+pmem | head -n 10
三.TOP动态查看进程信息
- 查看动态的进程排名信息(每5秒刷新一次页面数据)
按键盘数字1可以查看系统内每个cpu的使用情况,再次按1将返回显示系统内cpu的平均使用情况。
进程信息区各列解释
top常用命令
top -H:显示所有线程
top -H -p <pid>:显示特定进程中的线程
系统查看命令总结
查看进程信息pgrep
pggrep
查看进程树pstree
pstree
- -a 显示完整信息
- -u 列出对应用户名
- -p 列出对应PID
四.控制进程
进程的启动方式
进程的前后台调度
Ctrl+Z组合键:将当前进程挂起,即调入后台并停止执行
jobs命令:jobs [-l]查看处于后台的任务列表
fg命令:将后台进程恢复到前台运行,可指定任务序号
终止进程的运行
Ctrl+C组合键 中断正在执行的命令
kill、kilall命令
- kill用于终止指定PID号的进程
- killall用于终止指定名称相关的所有进程
- -9选项用于强制终止
- (1)SIGHUP:重载配置文件,但是不杀死任务,效果等同于reboot;
- (3)SIGQUIT:给予提示信息,保存日志文件及程序执行信息;
- (9) SIGKILL:表示进程被终止,需要立即退出,强制杀死该进程,这个信号不能被捕获也不能被忽略;
- (15)SIGTERM:告诉进程需要被关闭,请自行停止运行并退出;
- 补充: 我们经常会用到kill命令去杀死一个进程,但是有时会出现kill不成功的现象,这时就要用到kill -9。
- 之所以这两个命令会有区别是因为所发送的信号(signal)是不同的。默认情况下kill命令的参数为-15。
- kill -15代表的信号为SIGTERM,这是告诉进程你需要被关闭,请自行停止运行并退出;
- 而kill -9代表的信号是SIGKILL,表示进程被终止,需要立即退出;
- 因此kill -9表示强制杀死该进程,这个信号不能被捕获也不能被忽略。
终止进程的运行pkill
pkill命令:根据特定条件终止相应的进程;
- -U:根据进程所属的用户名终止相应进程
- -t:根据进程所在的终端终止相应进程
查看终端信息的命令(who、w、ps aux)
五.计划任务管理
一次性计划任务
- ● 使用at命令设置的任务只在指定时间点执行一次,若只指定时间则表示当天的该时间,若只指定日期则表示该日期的当前时间
- ● 可以在at交互环境中输入多条命令,最后按Ctrl+D组合键提交
at [HH:MM] [yyyy-mm–dd]:在特定时间##年##月##日##时##分,设置一次性计划任务
周期性计划任务
crontab命令
- 按照预先设置的时间(分钟、小时、天、月、周)周期复执行用户指定的命令操作
- 属于周期性计划任务
- 主要设置文件
- 全局配置文件,位于文件:/etc/crontab
- 系统默认的设置,位于目录:/etc/cron.*/
- 用户定义的设置,位于文件:/var/spool/cron/用户名
实列
[root@localhost tmp]# crontab -l
no crontab for root
[root@localhost tmp]# systemctl status crond.service
● crond.service - Command SchedulerLoaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)Active: active (running) since 四 2024-04-18 16:40:11 CST; 29min agoMain PID: 1261 (crond)Tasks: 1CGroup: /system.slice/crond.service└─1261 /usr/sbin/crond -n4月 18 16:40:11 localhost.localdomain systemd[1]: Started Command Scheduler.
4月 18 16:40:11 localhost.localdomain crond[1261]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 56% if used.)
4月 18 16:40:12 localhost.localdomain crond[1261]: (CRON) INFO (running with inotify support)
[root@localhost tmp]# crontab -e
no crontab for root - using an empty one
crontab: installing new crontab
[root@localhost tmp]# crontab -l
30 9-17 1-15 2,12 * /usr/bin/ls
[root@localhost tmp]# cd /var/spool/cron
[root@localhost cron]# cat root
30 9-17 1-15 2,12 * /usr/bin/ls
[root@localhost cron]# echo '30 7 * * 6 /usr/bin/systemctl httpd restart' >> /var/spool/cron/root
[root@localhost cron]# crontab -l
30 9-17 1-15 2,12 * /usr/bin/ls
30 7 * * 6 /usr/bin/systemctl httpd restart
[root@localhost cron]# crontab -e #打开crontab
crontab: installing new crontab
[root@clr /var/spool/cron]# vim /etc/crontab #修改全局配置文件也可以编辑crontab计划SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root# For details see man 4 crontabs# Example of job definition:
# .---------------- 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
*/5 * * * * root#(此处需要添加指定用户名) /usr/bin/ls