程序
保存在硬盘,光盘等介质中的可执行代码和数据
静态保存的代码 进程
在CPU及内存中运行的程序代码
动态执行的代码
父.子进程:每个进程可以创建一个或多个进程,是一个依赖关系。 线程
操作系统能够进行运算调度的最小单位。
包含在进程之中,是进程中的实际运作单位。
一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务
举例: 以一个工厂结构举例
应用程序=工厂
进程=车间
线程=工人
高并发处理→依赖于多线程操作
ps命令是Linux系统中最为常用的进程查看工具,主要用于显示包含当前运行的各进程完整信息的静态快照
a:显示当前终端下所有进程信息,包含其他用户进程。与“x”选项结合时显示系统中所有进程信息
* -e:显示系统内的所有进程信息 * x:显示当前用户在所有终端下的进程信 * -f:使用完整的格式显示进程信息 *-l:使用长格式显示进程信息查看当前的进程
[root@localhost ~]# ps PID TTY TIME CMD 18669 pts/1 00:00:00 bash 18685 pts/1 00:00:00 ps*上述信息中每一列的字段的意思
USER:启动该进程的用户账号的名称 PID :该进程在系统中的数字ID,在当前系统中是唯一的
TTY :表明该进程在哪个终端上运行,“?”表示不需要终端
SATA: 显示了进程当前的状态
START:启动该进程的时间
TIME:该进程占用的CPU时间
COMMAND:启动该进程的命令名称
%CPU:占用CPU百分比
%MEM:占用内存百分比
VSZ: 占用虚拟机内存大小(swap)
RSS: 占用物理内存的大小(物理内存)
ps -elf命令长格式显示系统进程信息
[root@localhost ~]# ps -elf F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD 4 S root 1 0 0 80 0 - 31997 ep_pol 10:34 ? 00:00:01 /usr/lib/systemd/systemd 1 S root 2 0 0 80 0 - 0 kthrea 10:34 ? 00:00:00 [kthreadd] 1 S root 3 2 0 80 0 - 0 smpboo 10:34 ? 00:00:00 [ksoftirqd/0] 1 S root 5 2 0 60 -20 - 0 worker 10:34 ? 00:00:00 [kworker/0:0H] 1 S root 6 2 0 80 0 - 0 worker 10:34 ? 00:00:00 [kworker/u256:0] 1 S root 7 2 0 -40 - - 0 smpboo 10:34 ? 00:00:00 [migration/0] 1 S root 8 2 0 80 0 - 0 rcu_gp 10:34 ? 00:00:00 [rcu_bh]PPID:表示对应进程的父进程的PID号
PRI:用户态优先级(人为)
NI: nice值,内核态优先级,取值范围(-20~19),值越小,优先级越高
ADDR:若是 - ,代表正在运行
SZ:在swap交换分区的容量
WCHAN:当前进程在内核中的名称
STIME:启动时间
使用ps命令查看到的是一个静态的进程信息,并不能连续的反馈出当前进程的运行状态
top命令将会在当前终端以全屏交互式的界面显示进程排名,及时跟踪包括CPU,内存等系统资源占用情况
最上面可以看见CPU占用率最高的进程
作用类似于Windows系统中的任务管理器
默认情况下每三秒刷新一次 作用类似于Windows系统中的任务管理器
[root@localhost ~]# top top - 14:30:40 up 3:55, 3 users, load average: 0.00, 0.01, 0.05 Tasks: 115 total, 2 running, 113 sle eping, 0 stopped, 0 zombie %Cpu(s): 0.3 us, 0.0 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 3861484 total, 3373632 free, 164880 used, 322972 buff/cache KiB Swap: 4063228 total, 4063228 free, 0 used. 3423544 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 20 0 127988 6576 4144 S 0.0 0.2 0:02.04 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:00.71 ksoftirqd/0TASKS:系统任务,总进程数;running,正在运行的进程数;sleeping。休眠的进程数;stopped,中止的进程数;zombie,僵死无响应的进程数
MEM:内存大小,total,总内存空间;used,已用内存空间;free,空闲内存空间;buffers,缓存区域
CPU:以CPU占用排序,s,用户占用;sy,内核占用;ni,优先级调度占用;id,空闲CPU;wa,I/O等待占用;hi,硬件中断占用;si,软件中断占用;st,虚拟化占用。要了解空闲的CPU百分比,主要是看%id部分
交换空间(Swap)占用:total,总交换空间;used,已用交换空间;free,空闲交换空间;cached,缓存空间
q:退出
ctrl+C 终止进程
ctrl+Z 挂起进程
根据进程的名称、运行该进程的用户、进程所在的终端等多种属性查询特定进程的PID 号
通过pgrep命令可以指定进程的一部分名称进行查询, -l 选项可以同时输出对应的进程名 -U 查询特定用户的进程 -t 选项查询在特定终端运行的进程 pgrep:查看ps命令某个进程PLD的信息
查询进程名称,运行进程用户
[root@localhost ~]# pgrep -l 'log' 查询log的进程号 4291 xfs-log/dm-0 7322 xfs-log/sda1 8530 xfs-log/dm-2 8840 systemd-logind 9666 rsyslogd查询由用户 teacher 在 tty2 终端上运行的进程及 PID 号
[root@localhost ~]# pgrep -l -U root -t tty1 10189 bash tty=0 远程终端登录 tty=1 本地终端登录 结合“-U”选项查询特定用户的进程 “-t”选项查询在特定终端运行的进程pstree命令以属性结构列出进程信息,可以更直观的判断各进程的相互关系(父,子进程)
pstree命令默认情况下只显示各进程的名称
“-p”选项,列出对应的PID号
“-u”选项,列出对应的用户名
“-a”选项,列出完整的命令信息
pstree命令默认情况下只显示各进程的名称
结合 “-p”选项,列出对应的PID号
结合 “-u”选项,列出对应的用户名
结合 “-a”选项,列出完整的命令信息
[root@localhost ~]# pstree -aup systemd,1 --switched-root --system --deserialize 22 ├─NetworkManager,9084 --no-daemon │ ├─dhclient,18543 -d -q -sf /usr/libexec/nm-dhcp-helper -pf /var/run/dhclient-ens33.pid -lf... │ ├─{NetworkManager},9092 │ └─{NetworkManager},9095 ├─VGAuthService,8788 -s ├─auditd,8640 │ └─{auditd},8642 ├─chronyd,8804,chrony ├─crond,8877 -n ├─dbus-daemon,8792,dbus --system --address=systemd: --nofork --nopidfile --systemd-activation │ └─{dbus-daemon},8834 ├─firewalld,8908 -Es /usr/sbin/firewalld --nofork --nopid │ └─{firewalld},9378 ├─login,10184 │ └─bash,10189 ├─lvmetad,4379 -f ├─master,9958 -w │ ├─pickup,18589,postfix -l -t unix -u │ └─qmgr,9964,postfix -l -t unix -u ├─polkitd,8779,polkitd --no-debug │ ├─{polkitd},8830 │ ├─{polkitd},8839 │ ├─{polkitd},8843 │ ├─{polkitd},8846 │ ├─{polkitd},8848 │ └─{polkitd},8867 ├─rsyslogd,9666 -n │ ├─{rsyslogd},9669 │ └─{rsyslogd},9671 ├─sshd,9662 -D │ ├─sshd,18436 │ │ └─bash,18440 │ └─sshd,18665 │ └─bash,18669 │ └─pstree,18843 -aup ├─systemd-journal,4362 ├─systemd-logind,8840 ├─systemd-udevd,4392 ├─tuned,9664 -Es /usr/sbin/tuned -l -P │ ├─{tuned},10063 │ ├─{tuned},10064 │ ├─{tuned},10065 │ └─{tuned},10079 └─vmtoolsd,8789 └─{vmtoolsd},8942手动启动
前台启动:用户输入命令,直接执行程序
后台启动:在命令行尾加入&符号
[root@localhost ~]# cp /dev/cdrom mycd.iso& //在后台运行复制镜像文件进程 [1] 18877 //pld号调度启动进程
有些任务非常费时,适合在相对空闲的时间进行,我们便可以使用调度安排启动
at命令,设置一次性计划任务(如 1:55重启网络服务)
crontab,命令,设置周期性计划任务(如 每周六15:00 备份数据库)
挂起当前进程 Ctrl+Z 组合键
将当前进程挂起,即调入后台并停止执行(对于速度缓慢,会耽误其他操作的进程使用)
查看处于后台的任务列表。 结合**“-l**”选项可以同时显示出该进程对应的PID号 输出结果中,每一行记录对应一个后台进程的状态信息,行首的数字代表该进程在后台的任务编号。 若当前终端没有后台进程,将不会显示任何信息
将后台进程恢复到前台运行,可以指定任务序号 bg(BackGround)命令可以将后台中暂停执行的任务恢复运行,继续在后台执行操作 fg(ForeGround)命令可以将后台任务恢复到前台运行 除非后台任务只有一个,否则bg和fg命令都需要指定后台进程的任务编号作为参数
Ctrl + C组合键无法中止后,可以使用专门fg的进程中止工具 kill,killall,pkill
把创建vim1.2,停止他并看出进程
[root@localhost 桌面]# vim 1.txt
[4]+ Stopped vim 1.txvit [root@localhost 桌面]# vim 2.txt
[5]+ Stopped vim 2.txtjo
[root@localhost ~]# jobs -l [1]- 19117 停止 vim 2.txt [2]+ 19118 停止 vim 1.txtkill命令需要使用进程的PID号作为参数
若进程无法响应,可结合“-9”选项强行中止进程。强行中止进程可能会到时部分数据丢失,谨慎使用
killall命令通过进程名来中止进程,可终止指定名称所有进程(可理解为终止进程树) killall命令同样有“-9”选项,强制终止进程
根据特定条件终止相应的进程 常用命令选项: -U:根据进程所属的用户名终止相应的进程 -t:根据进程所在的终端终止相应的进程
[tom@localhost root]$ pkill -9 -u 'tom' 已杀死pgrep -l -U “tom” 在查看tom运行的进程( 定点杀死) pkill -9 -U “tom” 与 kill -9 有什么不同的地方(杀死所有)
at一次性任务
基本格式
at [HH:MM] [yyyy-mm-dd] ‘//at 时:分 年-月-日’
atq 命令,查看待执行任务的列表
atrm 命令,删除指定编号的at任务
root@localhost opt]# date 2017年 11月 18日 星期六 00:15:24 CST [root@localhost ~]# at 15:26 2020-07-01 [root@localhost opt]# atq 4 2017-11-18 00:16 a root 问题1:出现这个问题 Can't open /var/run/atd.pid to signal atd. No atd running? 解决 systemctl start atd.service 开启一下atd服务atq 命令,查看待执行任务的列表 对于已经设置,但并未执行的任务,可通过atq命令查看。(已经执行的任务不会出现) atq查看的任务列表,每个任务的序号不会变动,即便1-5个序号任务已经执行完毕,显示出的第六个未执行任务的序号也是6,而不会变成1。
[root@localhost ~]# atq 2 Sun May 7 21:30:00 2017 a root由cronie,crontab工具
/etc/crontab 系统任务配置文件 crontab(定时任务) 使用crontab命令设置的计划任务可以按预设的周期重复执行,可以大大减轻重复性系统管理任务的操作 软件包cronie 提供crontab工具,系统服务crond和配置文件 /etc/crontab。 开启系统服务crond 是启动周期性任务的前提条件
全局配置文件
/etc/crontab 文件中设置的是维护Linux系统所需的任务
Linux系统及相关程序在安装时自动设置
不建议用户手动修改此文件
at /etc/crontab #### 计划任务配置文件 SHELL=/bin/bash '//设置执行计划任务的Shell环境' PATH=/sbin:/bin:/usr/sbin:/usr/bin '//定义可执行命令及程序的路径' MAILTO=root '//执行计划任务时使用的主目录' # For details see man 4 crontabs # Example of job definition: # .---------------- minute (0 - 59) '//分钟范围:0-59' # | .------------- hour (0 - 23) '//小时范围:0-23' # | | .---------- day of month (1 - 31) '//一个月的天数范围:1-31' # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... '//月数范围:1-12' # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat '//一周的天数范围: 0-6(周日用0或者7表示)' # | | | | | # | | | | | # * * * * * user-name command to be executed 分 时 日 月 天 [root@localhost opt]# systemctl status crond.service ####查看计划任务程序的状态 centos 7.0以上版本 [root@localhost opt]# systemctl start crond.service ####启动计划任务程序 centos 7.0以上版本 [root@localhost opt]# systemctl stop crond.service ####停止计划任务程序 centos 7.0以上版本]() service crond start ####计划任务功能要开启 ###centos 7.0以下版本 crontab -e ####添加计划任务 40 0 * * * /bin/cp /opt/1.txt /mnt ####这边命令必须是绝对路径 [root@localhost ~]# ls /opt/ 1.txt ps.txt [root@localhost ~]# ls /mnt 1.txt [root@localhost opt]# crontab -r ###清空 [root@localhost opt]# crontab -l ###查看下1.2 /etc/cron.*/ 系统默认设置 系统默认设置cron任务的配置文件存放目录
软件包crontabs安装后,会在/etc/cron.*/目录下生成存放一些系统默认设置的计划任务目录,设置了系统每个小时,每一天做些什么任务
例如: /etc/cron.hourly/ 目录下存放的是系统每小时要做的任务可执行脚本 /etc/cron.daily/ 目录下存放的是系统每天要做的任务可执行脚本 /etc/cron.weekly/ 目录下存放的是系统每周要做的任务可执行脚本 /etc/cron.monthly/ 目录下存放的是系统每月要做的任务可执行脚本 这些是可执行脚本,不是cron配置文件,crond服务通过run-parts 工具调用执行这些脚本命令格式:时间周期设置+任务内容设置
项目说明分钟取值为0到59之间的任意整数小时取值为0到23之间的任意整数日期取值为1到31之间的任意整数月份取值为1到12之间的任意整数星期取值为0到7之间的任意整数,0或7代表星期日命令要执行的命令或程序脚本 时间数值的特殊表示方法 * 表示该范围内的任意时间 , 表示间隔的多个不连续的时间点 - 表示一个连续的时间范围 / 指定间隔的时间频率 例如: 0 15 * * 1-5 '//表示周一到周五每天15:00' 30 8 * * 2,3,4 '// 表示每周二,三,四的8点30分' 0 9-11/3 * * * '// 表示8点到18点之间每2小时' 0 * */5 * * '//表示每5天'