程序和计划任务管理( 查看进程,控制进程,at一次性任务,crontab周期任务)

一: 程序,进程的关系

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 	     查看当前用户的计划列表'


命令格式:时间周期设置+任务内容设置

mark

项目 说明
分钟 取值为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天'

猜你喜欢

转载自blog.csdn.net/weixin_47151717/article/details/107125565