查看和控制进程
什么是程序?什么是进程?
程序是保存在外部存储介质(如硬盘,光盘)中的可执行的机械代码和数据的静态集合。进程则是在CPU及内存中处于动态执行状态的计算机程序。通俗的说进程就会正在运行的程序。+
怎么查看进程
方法一:用ps命令查看静态的进程统计信息
常用选项:
-a 显示一个终端的所有进程,除了会话引线
-u uid or username 选择有效的用户id或者是用户名
-x 显示没有控制终端的进程,同时显示各个命令的具体路径。dx不可合用。(utility)
e 命令之后显示环境(如:ps -d e; ps -a e)(utility)
-l 长格式(有F,wchan,C 等字段)
-f 全部列出,通常和其他选项联用。如:ps -fa or ps -fx and so on.
常用的选项组合
-aux 显示所有包含其他使用者的行程
-elf 以长格式显示系统中的进程信息,并包含丰富的内容
[root@localhost ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.4 0.1 128164 6824 ? Ss 22:08 0:02 /usr/lib/systemd/syst
Head标头:
USER 用户名
UID 用户ID(User ID)
PID 进程ID(Process ID)
PPID 父进程的进程ID(Parent Process id)
SID 会话ID(Session id)
%CPU 进程的cpu占用率
%MEM 进程的内存占用率
VSZ 进程所使用的虚存的大小(Virtual Size)
RSS 进程使用的驻留集大小或者是实际内存的大小,Kbytes字节。
TTY 与进程关联的终端(tty)
STAT 进程的状态:进程状态使用字符表示的(STAT的状态码)
直接执行ps仅仅显示当前的会话中打开的进程
ps aux |grep bash ##过滤出包含bash的进程信息
方法二:用top命令查看进程动态信息
每三秒刷新一次
[root@localhost ~]# top
top - 22:31:00 up 22 min, 3 users, load average: 0.00, 0.01, 0.05
Tasks: 198 total, 1 running, 197 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.1 us, 0.1 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 3865308 total, 2216624 free, 818412 used, 830272 buff/cache
KiB Swap: 4194300 total, 4194300 free, 0 used. 2746016 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
12963 lai 20 0 2094872 256356 51892 S 0.7 6.6 0:10.76 gnome-shell
1 root 20 0 128164 6824 4064 S 0.0 0.2 0:02.75 systemd
第1行:top - 05:43:27 up 4:52, 2 users, load average: 0.58, 0.41, 0.30
内容含义05:43:27表示当前时间up 4:52系统运行时间 格式为时:分2 users当前登录用户数load average: 0.58, 0.41, 0.30系统负载,即任务队列的平均长度。 三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。
第2行:Tasks: 159 total, 1 running, 158 sleeping, 0 stopped, 0 zombie
第3行:%Cpu(s): 37.0 us, 3.7 sy, 0.0 ni, 59.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
第2、3行为进程和CPU的信息
当有多个CPU时,这些内容可能会超过两行,其参数如下:
内容含义159 total进程总数1 running正在运行的进程数158 sleeping睡眠的进程数0 stopped停止的进程数0 zombie僵尸进程数37.0 us用户空间占用CPU百分比3.7 sy内核空间占用CPU百分比0.0 ni用户进程空间内改变过优先级的进程占用CPU百分比59.3 id空闲CPU百分比0.0 wa等待输入输出的CPU时间百分比0.0 hi硬中断(Hardware IRQ)占用CPU的百分比0.0 si软中断(Software Interrupts)占用CPU的百分比0.0 st
第4行:KiB Mem: 1530752 total, 1481968 used, 48784 free, 70988 buffers
第5行:KiB Swap: 3905532 total, 267544 used, 3637988 free. 617312 cached Mem
第4、5行为内存信息
内容含义KiB Mem: 1530752 total物理内存总量1481968 used使用的物理内存总量48784 free空闲内存总量70988 buffers(buff/cache)用作内核缓存的内存量KiB Swap: 3905532 total交换区总量267544 used使用的交换区总量3637988 free空闲交换区总量617312 cached Mem缓冲的交换区总量。3156100 avail Mem代表可用于进程下一次分配的物理内存数量
pgrep命令查看进程信息
pgrep -l “log” ##查看进程名中包含log的进程及其PID号
pgrep -l -U lai -t tty1 ##-U是查询特定用户的进程 -t 选项查询在特定终端上运行
进程树
执行pstree -aup 可以查看当前系统的进程树,包含各进程对应的PID号,用户名
完整命令等信息
执行pstree -ap lai 可以查看来用户的进程和子进程
常有netstat -antp |grep httpd查看端口号
控制进程
1、手动启动进程
cp /dev/cdrom mycd.iso& ##输出信息中包括后台任务序号、PID号。
2、改变进程的运行方式
在下载比较大的文件的时候如果在前台显示就会耽误你的其他操作,所以有时候要把这个进程放在后台
wget ftp://172.17.17.13/Firefox-latest.tar.bz2
按Ctrl+Z可以把进程放在后台(暂停运行)
jobs ##查看后台的进程任务
jobs -l ##可以看前面挂载的进程任务
fg 1 ##将后台进程掉到前台1是进程号
注意:使用bg命令,能将后台暂停的任务恢复运行,继续在后台
3、终止进程执行
用Ctrl+C无法终止进程可以用kill、killall和pkill进行终止
pgrep -l "sshd" ##看sshd的进程号
1111 sshd
kill 1111 ##可以终止sshd进程
还可以结合-9强行终止终止
killall 可以直接后面跟进程的名称终止进程 可以是多杀
pkill命苦执行的是面杀
如pgrep -l -U “hackli” ##确认用户
pkill -9 -U “hackli” ##终止用户的进程
计划任管理
at一次性任务设置
[root@localhost ~]# date
2020年 11月 01日 星期日 00:00:55 CST
[root@localhost ~]# at 00:05 2020-01-01
at: refusing to create job destined in the past
[root@localhost ~]# at 00:05 2020-11-01
at> pgrep -U root | wc -l >/opt/lai2
at> <EOT> ##ctrl+D执行
job 2 at Sun Nov 1 00:05:00 2020
您在 /var/spool/mail/root 中有邮件
[root@localhost ~]# at 01:00
at> shotdown -h now
at> <EOT>
job 3 at Sun Nov 1 01:00:00 2020
[root@localhost ~]# atq ##查
2 Sun Nov 1 00:05:00 2020 a root
3 Sun Nov 1 01:00:00 2020 a root
[root@localhost ~]# atrm 3 ##删除
[root@localhost ~]# atq
2 Sun Nov 1 00:05:00 2020 a root
crontab 周期性任务设置
1、配置文件位置
[root@localhost ~]# cat /etc/crontab
SHELL=/bin/bash ##执行计划任务的shell环境
PATH=/sbin:/bin:/usr/sbin:/usr/bin ##定义可执行命令及程序的路径
MAILTO=root ##将任务输出信息发送到指定用户的邮箱
HOME=/ ##执行计划任务时使用的主目录
# 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
crontab -l 查看当前用户的定时任务
crontab -e 编辑当前用户的定时任务
crontab -r 删除当前用户的定时任务
crontab -u 指定用户
分 时 年 月 周
“-” 表示连续时间段
“*” 表示取值范围为任意时间
“,” 表示间隔不连续范围
“/” 表示指定间隔频率
- 表示第几分钟(小时/日/月/星期)执行一次 ;
- */n 表示每n分钟(小时/日/月/星期)执行一次;
- T1-T2 表示从T1到T2分钟(小时/日/月/星期)要执行任务;
- a,b,c 表示a,b,c分钟(小时/日/月/星期)分别执行一次; 1: 59 23 * * *
1:/home/oracle/scripts/alert_log_archive.sh >/dev/null 2>&1
表示每天23点59分执行脚本/home/oracle/scripts/alert_log_archive.sh
2: /5 * * * * /home/oracle/scripts/monitoring_alert_log.sh >/dev/null 2>&1
表示每5分钟执行一次脚本/home/oracle/scripts/monitoring_alert_log.sh
3: 0 20 * * 1-5 mail -s "*********" k@.name < /tmp/maildata
周一到周五每天下午 20:00 寄一封信给 k@.name