文章目录
一: 程序,进程的关系
1.1进程概述
程序是保存在外部储存介质中的可执行机器代码和数据的静态集合,进程是在cpu中处于动态执行状态的计算机程序。每个程序可以创建多个进程
二:查看进程
2.1:静态查看ps命令
2 .1.1:ps命令查看静态统计信息
ps命令是Linux系统中最为常用的进程查看工具,主要用于显示包含当前运行的各进程完整信息的静态快照
a:显示当前终端下所有进程信息,包含其他用户进程。与“x”选项结合时显示系统中所有进程信息
* -e:显示系统内的所有进程信息
* x:显示当前用户在所有终端下的进程信
* -f:使用完整的格式显示进程信息
*-l:使用长格式显示进程信息
2.1.2查看当前的进程
[root@localhost ~]# ps
PID TTY TIME CMD
18669 pts/1 00:00:00 bash
18685 pts/1 00:00:00 ps
2.1.3:查看ps aux命令 简单的列表查看进程信息
[root@localhost ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 127988 6576 ? Ss 10:34 0:01 /usr/lib/systemd/systemd --switched-root --system --deser
root 2 0.0 0.0 0 0 ? S 10:34 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 10:34 0:00 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< 10:34 0:00 [kworker/0:0H]
root 6 0.0 0.0 0 0 ? S 10:34 0:00 [kworker/u256:0]
root 7 0.0 0.0 0 0 ? S 10:34 0:00 [migration/0]
root 8 0.0 0.0 0 0 ? S 10:34 0:00 [rcu_bh]
root 9 0.0 0.0 0 0 ? R 10:34 0:01 [rcu_sched]
root 10 0.0 0.0 0 0 ? S< 10:34 0:00 [lru-add-drain]
root 11 0.0 0.0 0 0 ? S 10:34 0:00 [watchdog/0]
*上述信息中每一列的字段的意思
USER:启动该进程的用户账号的名称
PID :该进程在系统中的数字ID,在当前系统中是唯一的
TTY :表明该进程在哪个终端上运行,“?”表示不需要终端
SATA: 显示了进程当前的状态
START:启动该进程的时间
TIME:该进程占用的CPU时间
COMMAND:启动该进程的命令名称
%CPU:占用CPU百分比
%MEM:占用内存百分比
VSZ: 占用虚拟机内存大小(swap)
RSS: 占用物理内存的大小(物理内存)
2.1.3: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]
2.1.4:运用grep命令过滤bash进程
[root@localhost ~]# ps aux |grep bash
root 10189 0.0 0.0 115440 2128 tty1 Ss+ 10:37 0:00 -bash
root 18440 0.0 0.0 115440 2024 pts/0 Ss+ 13:26 0:00 -bash
root 18669 0.0 0.0 115440 2084 pts/1 Ss 14:06 0:00 -bash
root 18722 0.0 0.0 112724 988 pts/1 S+ 14:24 0:00 grep --color=auto bash
2.1.5:查看top命令
最上面可以看见CPU占用率最高的进程
作用类似于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/0
TASKS:系统任务
MEM:内存大小
CPU:以CPU占用排序
q:退出
ctrl+C 终止进程
ctrl+Z 挂起进程
2.3:pgrep命令–查看进程信息
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
[root@localhost ~]# pgrep -l -U root -t tty1
10189 bash
tty=0 远程终端登录
tty=1 本地终端登录
结合“-U”选项查询特定用户的进程
“-t”选项查询在特定终端运行的进程
2.3.2:pstree命令–查看进程树
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号
[root@localhost ~]# yum -y install wget 安装一下wget
[root@localhost ~]# wget http://d2.w10a.com/win7/cn_windows_7_ultimate_with_sp1_x64_dvd_677408.iso
调度启动进程
-
有些任务非常费时,适合在相对空闲的时间进行,我们便可以使用调度安排启动
-
at命令,设置一次性计划任务(如 1:55重启网络服务)
-
crontab,命令,设置周期性计划任务(如 每周六15:00 备份数据库)
wget 软件包
-
wget 是一个从网络上自动下载文件的自由工具,支持通过 HTTP、HTTPS、FTP 三个最常见的 TCP/IP协议 下载,并可以使用 HTTP 代理。“wget” 这个名称来源于 “World Wide Web” 与 “get” 的结合。
我们可yum -y install wget 安装这个工具
改变进程的运行方式
挂起当前进程 Ctrl+Z 组合键
将当前进程挂起,即调入后台并停止执行(对于速度缓慢,会耽误其他操作的进程使用)
查看后台进程 jobs 命令
查看处于后台的任务列表。
结合**“-l**”选项可以同时显示出该进程对应的PID号
输出结果中,每一行记录对应一个后台进程的状态信息,行首的数字代表该进程在后台的任务编号。
若当前终端没有后台进程,将不会显示任何信息
将后台的进程恢复运行 fg 命令
将后台进程恢复到前台运行,可以指定任务序号
bg(BackGround)命令可以将后台中暂停执行的任务恢复运行,继续在后台执行操作
fg(ForeGround)命令可以将后台任务恢复到前台运行
除非后台任务只有一个,否则bg和fg命令都需要指定后台进程的任务编号作为参数
终止进程执行平常可以使用Ctrl + C组合键强制中断
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.txt
使用kill命令终止进程
kill命令需要使用进程的PID号作为参数
若进程无法响应,可结合“-9”选项强行中止进程。强行中止进程可能会到时部分数据丢失,谨慎使用
kill -9强行终止
使用killall命令终止进程
killall命令通过进程名来中止进程,可终止指定名称所有进程(可理解为终止进程树)
killall命令同样有“-9”选项,强制终止进程
U是指定用户
pgrep -l -U “tom” ###查看tom运行的进程
[tom@localhost root]$ pgrep -l -u 'tom'
19263 bash
pkill -9 -U “tom” ###强行终止tom运行的进程
[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服务
crontab周期性任务设置
由cronie,crontab工具
/etc/crontab 系统任务配置文件
/etc/crontab 文件中设置的是维护Linux系统所需的任务
/etc/cron.*/ 系统默认设置
/etc/cron.hourly/ 目录下存放的是系统每小时要做的任务可执行脚本
/etc/cron.daily/ 目录下存放的是系统每天要做的任务可执行脚本
/etc/cron.weekly/ 目录下存放的是系统每周要做的任务可执行脚本
/etc/cron.monthly/ 目录下存放的是系统每月要做的任务可执行脚本
/var/spool/cron/用户名 用户定义的位置
at /etc/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
分 时 日 月 天
[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 ###查看下
使用crontab命令管理用户的计划任务
常用选项
-e 编辑计划任务 e:edit,编辑,使用方式同Vim编辑器。'
-l 查看计划任务 l:list,列表'
-r 删除计划任务 r:remove,移除'
-u 指定管理计划属于哪个用户
-l 查看当前用户的计划列表'
命令格式:时间周期设置+任务内容设置
项目 | 说明 |
---|---|
分钟 | 取值为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天'
--------- |
| 分钟 | 取值为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天'