理论:linux进程和计划任务管理

前言

查看进程:分为动态查看和动态查看

成都创新互联公司服务项目包括吴兴网站建设、吴兴网站制作、吴兴网页制作以及吴兴网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,吴兴网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到吴兴省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

控制进程:以关掉进程为主,可以按条件关闭指定进程,全部关闭所有进程

at 一次性任务设置

crontab 周期性任务设置

一: 程序和进程的关系

1、 程序

  • 保存在硬盘、光盘等介质中的可执行代码和数据

  • 静态保存的代码

2、 进程

  • 在CPU及内存中运行的程序代码

  • 动态执行的代码

  • 父、子进程

​ - 每个进程可以创建一个或多个进程

3、程序、进程、线程之间的三者关系

一个应用程序可以包含一个或多个应用进程

一个进程包含一个或多个线程

线程是执行操作的最小单元

例子

应用程序=工厂

进程=车间

线程=工人

高并发处理依赖于多线程操作

二 :查看静态进程信息 ps

2.1 ps 命令

直接执行不带任何子选项的命令时,将只显示当前用户会话中打开的进程

[root@localhost ~]# ps
   PID TTY          TIME CMD
  4898 pts/1    00:00:00 bash
  5249 pts/1    00:00:00 ps

2.2 ps aux 命令

查看静态的进程统计信息

[root@localhost ~]# ps aux
[root@localhost ~]# ps aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.3 128212  6836 ?        Ss   10:43   0:01 /usr/lib/systemd/s
root          2  0.0  0.0      0     0 ?        S    10:43   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?        S    10:43   0:00 [ksoftirqd/0]
root          5  0.0  0.0      0     0 ?        S<   10:43   0:00 [kworker/0:0H]
root          6  0.0  0.0      0     0 ?        S    10:43   0:00 [kworker/u256:0]
root          7  0.0  0.0      0     0 ?        S    10:43   0:00 [migration/0]
root          8  0.0  0.0      0     0 ?        S    10:43   0:00 [rcu_bh]
root          9  0.0  0.0      0     0 ?        R    10:43   0:00 [rcu_sched]
root         10  0.0  0.0      0     0 ?        S    10:43   0:00 [watchdog/0]
root         12  0.0  0.0      0     0 ?        S    10:43   0:00 [kdevtmpfs]
root         13  0.0  0.0      0     0 ?        S<   10:43   0:00 [netns]
root         14  0.0  0.0      0     0 ?        S    10:43   0:00 [khungtaskd]

a 显示当前终端下的所有进程信息,包括其他用户的进程。与x结合时将显示系统中所有的进程信息 不带-

u 使用已用户为主的格式输出进程信息,不带-

x 显示当前用户在所有中终端下的进程信息,不带-

-e 显示系统中的所有进程信息

-l 使用长格式(long)显示进程信息

-f 使用完整的(full/)格式显示进程信息

竖着读的一列叫做字段,也叫做属性

字段解释
USER 启动该进程的用户账号的名称
PID 该进程在系统中的数字ID进程号,在当前系统中是唯一的
%CPU CPU的资源渣用率
%MEM 内存的占用率
VSZ 虚拟内存,在进程启用完毕后会释放归0
RSS 占用物理内存的大小(常驻内存)
TTY 显示了该进程在哪个终端上运行,是在本地终端还是在远程终端。“?”表示未知或者不需要终端
STAT 进程状态,S代表休眠,R代表运行,Z代表僵死,s代表父进程,<代表高优先级,N代表低优先级,+代表前台进程,l代表多线程;对于僵死进程需要及时手动关闭终止
TIME 表示启动该进程的已运行时间
COMMAND 表示启动该进程的命令的所处位置

2.3 ps elf命令

  • 查看静态的进程统计信息
[root@localhost ~]# ps -fle
[root@localhost ~]# ps -fle
F S UID         PID   PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
4 S root          1      0  0  80   0 - 32053 ep_pol 10:43 ?        00:00:01 /usr/lib/systemd/sy
1 S root          2      0  0  80   0 -     0 kthrea 10:43 ?        00:00:00 [kthreadd]
1 S root          3      2  0  80   0 -     0 smpboo 10:43 ?        00:00:00 [ksoftirqd/0]
1 S root          5      2  0  60 -20 -     0 worker 10:43 ?        00:00:00 [kworker/0:0H]
1 S root          6      2  0  80   0 -     0 worker 10:43 ?        00:00:00 [kworker/u256:0]
1 S root          7      2  0 -40   - -     0 smpboo 10:43 ?        00:00:00 [migration/0]
1 S root          8      2  0  80   0 -     0 rcu_gp 10:43 ?        00:00:00 [rcu_bh]
1 R root          9      2  0  80   0 -     0 -      10:43 ?        00:00:00 [rcu_sched]
5 S root         10      2  0 -40   - -     0 smpboo 10:43 ?        00:00:00 [watchdog/0]
5 S root         12      2  0  80   0 -     0 devtmp 10:43 ?        00:00:00 [kdevtmpfs]
1 S root         13      2  0  60 -20 -     0 rescue 10:43 ?        00:00:00 [netns]
1 S root         14      2  0  80   0 -     0 watchd 10:43 ?        00:00:00 [khungtaskd]
1 S root         15      2  0  60 -20 -     0 rescue 10:43 ?        00:00:00 [writeback]
1 S root         16      2  0  60 -20 -     0 rescue 10:43 ?        00:00:00 [kintegrityd]
1 S root         17      2  0  60 -20 -     0 rescue 10:43 ?        00:00:00 [bioset]

额外看到PPID,可以详细了解到该子进程的父进程是谁

PRI 用户态的优先级,可以进行人为控制的优先级

NI 是nice值(-20~19,值越小优先级越大)

不输入-,只输入ps lef得到一下结果

[root@localhost ~]# ps lef
F   UID    PID   PPID PRI  NI    VSZ   RSS WCHAN  STAT TTY        TIME COMMAND
4     0   4898   4894  20   0 116100  2808 do_wai Ss   pts/1      0:00 -bash USER=root LOGNAME=r
4     0   5436   4898  20   0 148984  1468 -      R+   pts/1      0:00  \_ ps lef XDG_SESSION_ID
4     0   2386   2379  20   0 116348  2868 n_tty_ Ss+  pts/0      0:00 bash USER=root LANG=zh_CN
4     0   1371   1150  20   0 281984 26360 ep_pol Ssl+ tty1       0:01 /usr/bin/X :0 -background

2.4 结合管道操作

由于系统中运行的进程数量较多,需要查询某一个进程的信息时可以结合管道操作和grep命令进行过滤

举例:

[root@localhost ~]# ps aux | grep bash
root        781  0.0  0.0 115308   948 ?        S    10:43   0:00 /bin/bash /usr/sbin/ksmtuned
root       1748  0.0  0.0  51376   584 ?        Ss   10:43   0:00 /usr/bin/ssh-agent /bin/sh -c exec -l /bin/bash -c "env GNOME_SHELL_SESSION_MODE=classic gnome-session --session gnome-classic"
root       2386  0.0  0.1 116348  2868 pts/0    Ss+  10:43   0:00 bash
root       4898  0.0  0.1 116100  2808 pts/1    Ss   13:45   0:00 -bash
root       5360  0.0  0.0 112728   968 pts/1    R+   14:18   0:00 grep --color=auto bash
[root@localhost ~]# ps aux | grep "bash$"
root       2386  0.0  0.1 116348  2868 pts/0    Ss+  10:43   0:00 bash
root       4898  0.0  0.1 116100  2808 pts/1    Ss   13:45   0:00 -bash

三 :查看动态进程信息 top

top命令

  • 查看动态的进程排名信息
[root@localhost ~]# top

表格是动态的

理论:linux进程和计划任务管理

  • tasks 系统任务信息; total 总进程数; running 正在运行的进程数; sleeping 休眠的进程数; stopped 中止的进程数; zombie 僵死无响应的进程数
  • cpu占用信息(%Cpu(s));us 用户占用; sy 内核占用; ni 优先级调度占用; id 空闲cpu; wa I/O等待占用; hi 硬件中断占用; si 软件中断占用; st 虚拟化占用;
  • Kib MEN 内存占用信息; total 总内存空间; used 已用内存; free 空闲内存;buff/cache 缓冲区域
  • KiB Swap 交换空间占用; total 总交换空间; used 已用交换空间; free 空闲交换空间; avail Mem 缓存空间

在top查看过程中,可以按c键根据cpu占用情况对进程列表进行排序,按M可以根据MEM内存占用情况进行排序,按h获得帮助信息,按q退出top程序,按k就是关闭进程(kill),通常情况下k中会有当前占用内存最高的pid在其中,默认直接关闭,也可以输入对应的pid去回车终止对应的进程

动态top查看主要看cpu占用

四 :查看进程信息 pgrep

pgrep命令

根据特定条件查询进程PID信息

[root@localhost ~]# pgrep -l "log"
400 xfs-log/dm-0
594 xfs-log/sda1
624 xfs-log/dm-2
688 systemd-logind
707 rsyslogd
715 abrt-watch-log
727 abrt-watch-log
[root@localhost ~]# pgrep  "log"
400
594
624
688
707
715
727
[root@localhost ~]# pgrep -l -U root -t tty1
1371 X

pgrep pid进程的过滤

-l 长格式显示,即显示进程名

-U 指定特定用户,检索查询该用户的进程

-t 指终端(telent ) tty1 代表远程终端

本地终端登录时会反馈为1

五: 查看进程信息 pstree

  • 以树形结构列出进程信息

-a 显示完整信息

-u 列出对应用户名

-p 列出对应PID号

[root@localhost ~]# pstree -aup  '查看所有完整信息和所有用户以及列出与所有对应PID的进程树'
systemd,1 --switched-root --system --deserialize 21
  ├─ModemManager,689
  │   ├─{ModemManager},708
  │   └─{ModemManager},756
  ├─NetworkManager,788 --no-daemon
  │   ├─dhclient,911 -d -q -sf /usr/libexec/nm-dhcp-helper -pf /var/run/dhclient-ens33.pid -lf...
  │   ├─dhclient,913 -d -q -sf /usr/libexec/nm-dhcp-helper -pf /var/run/dhclient-ens36.pid -lf...
  │   ├─{NetworkManager},792
  │   └─{NetworkManager},795
  ├─VGAuthService,700 -s
  ├─abrt-watch-log,715 -F BUG: WARNING: at WARNING: CPU: INFO: possible recursive locking detectedernel BUG
  ├─abrt-watch-log,727 -F Backtrace /var/log/Xorg.0.log -- /usr/bin/abrt-dump-xorg -xD
  ├─abrtd,710 -d -s
  ├─accounts-daemon,694
  │   ├─{accounts-daemon},706
  │   └─{accounts-daemon},757
......//省略部分信息
[root@localhost ~]# pstree -ap root '只查看root用户的所有完整命令信息和对应的PID的进程数'
systemd,1 --switched-root --system --deserialize 21
  ├─ModemManager,689
  │   ├─{ModemManager},708
  │   └─{ModemManager},756
  ├─NetworkManager,788 --no-daemon
  │   ├─dhclient,911 -d -q -sf /usr/libexec/nm-dhcp-helper -pf /var/run/dhclient-ens33.pid -lf...
  │   ├─dhclient,913 -d -q -sf /usr/libexec/nm-dhcp-helper -pf /var/run/dhclient-ens36.pid -lf...
  │   ├─{NetworkManager},792
  │   └─{NetworkManager},795
  ├─VGAuthService,700 -s
  ├─abrt-watch-log,715 -F BUG: WARNING: at WARNING: CPU: INFO: possible recursive locking detectedernel BUG
  ├─abrt-watch-log,727 -F Backtrace /var/log/Xorg.0.log -- /usr/bin/abrt-dump-xorg -xD
  ├─abrtd,710 -d -s
  ├─accounts-daemon,694
  │   ├─{accounts-daemon},706
  │   └─{accounts-daemon},757

六 : 进程的启动方式

6.1 手工启动

  • 前台启动:用户输入命令,直接执行程序
  • 后台启动;在命令行尾加入“&(读end)”符号,后台启用是为了防止文件过大会影响正常使用系统,这时就要去后台启用
[root@localhost dev]# cp /dev/cdrom mycd.iso&
[1] 6721    '输出信息中包括后台任务序号、产生对应的PID号'

6.2 调度启动(at、crontab)

  1. 使用at命令,设置一次性计划任务
  2. 使用crontab命令,设置周期性计划任务

6.3 进程的前后台调度

  1. Ctrl+Z 组合键
  • 将当前进程挂起,即调入后台并停止执行
  1. jobs 命令
  • 查看处于后台的进程列表
  1. fg命令
  • 将后台进程恢复到前台运行,可通过指定任务序号去选中
  1. bg命令
  • 将后台中的暂停执行的程序恢复运行,在后台进行接下来的操作

理论:linux进程和计划任务管理

因为要复制的内容容量过大,所以会卡一下

理论:linux进程和计划任务管理

命令执行完毕就会弹出命令行

为了解决这个问题,便出现了&

[root@localhost mnt]# cp -r Packages/ /opt/pas  '要执行的操作命令'

^C  'ctrl+c中止命令'
[root@localhost mnt]# cp -r Packages/ /opt/pas &    '后台运行'
[2] 6970    '显示序号和进程PID号'
[root@localhost mnt]# jobs  '查看后台的进程'
[1]+  已停止               cp -i /dev/cdrom mycd.iso(工作目录:/dev)
[2]-  运行中               cp -i -r Packages/ /opt/pas &
[root@localhost mnt]# jobs -l   '-l可以详细列出pid号,以此进行管理'
[1]+  6730 停止 (tty 输入)     cp -i /dev/cdrom mycd.iso(工作目录:/dev)
[2]-  6970 运行中               cp -i -r Packages/ /opt/pas &
[root@localhost mnt]# cp -rf Packages/ /opt/pa  

^Z  'ctrl+z把前台运行的命令切换到后台,被切换到后台的命令会被停止,如果需要再次让其运行,需要fg'
[2]+  已停止               cp -i -rf Packages/ /opt/pa
[root@localhost mnt]# fg 2  'fg 序号'
cp -i -rf Packages/ /opt/pa '被切换到前台继续运行'
^Z  '再次切换到后台'
[2]+  已停止               cp -i -rf Packages/ /opt/pa
[root@localhost mnt]# jobs      '再次查看后台程序'
[1]-  已停止               cp -i /dev/cdrom mycd.iso(工作目录:/dev)
[2]+  已停止               cp -i -rf Packages/ /opt/pa
[root@localhost mnt]# jobs -l
[1]-  6730 停止 (tty 输入)     cp -i /dev/cdrom mycd.iso(工作目录:/dev)
[2]+  7114 停止                  cp -i -rf Packages/ /opt/pa
[root@localhost mnt]# kill -9 6730  '强制杀掉pid为6730的进程'
[root@localhost mnt]# jobs -l   '查看'
[1]-  6730 已杀死  '被杀死'             cp -i /dev/cdrom mycd.iso(工作目录:/dev)
[2]+  7114 停止                  cp -i -rf Packages/ /opt/pa
[root@localhost mnt]# kill -9 7114  '依法炮制7114'
[root@localhost mnt]# jobs -l
[2]+  7114 已杀死               cp -i -rf Packages/ /opt/pa
[root@localhost mnt]# fg -2 '再次把后台序号为2的进程切换到前台'
-bash: fg: -2: 无效选项 '反馈无效选项'
fg: 用法:fg [任务声明]
[root@localhost mnt]# jobs -l   '再次查看'
[root@localhost mnt]#   '都没了'

七: 终止进程的运行

7.1 Ctrl+c 组合键

  • 终端正在执行的命令

7.2 kill、killall 命令

  • kill用于终止指定PID号的进程 kill pid
  • killall用于终止指定名称的所有进程 killall 进程
  • -9 选项用于强制终止
[root@localhost mnt]# systemctl start httpd '开启httpd'
[root@localhost mnt]# netstat -ntap | grep 80   '查看80端口'
tcp6       0      0 :::80                   :::*                    LISTEN      7466/httpd          
[root@localhost mnt]# killall -9 httpd  '终止httpd的所有进程'
[root@localhost mnt]# netstat -ntap | grep 80
[root@localhost mnt]# 

7.3 pkill命令

  • 根据特定条件终止相应的进程
  • 常用命令选项
    • -U:根据进程所属的用户名终止相应进程
    • -t :根据进程所在的终端终止相应进程
[root@localhost mnt]# pgrep -l -U "lisi"    '检索用户-u lisi的进程,并显示-l pid对应的进程'
7954 gnome-keyring-d
7972 gnome-session-b
7979 dbus-launch
7980 dbus-daemon
8038 gvfsd
8043 gvfsd-fuse
8129 ssh-agent
8148 at-spi-bus-laun
8153 dbus-daemon
8158 at-spi2-registr
8175 gnome-shell
8183 pulseaudio
8190 ibus-daemon
[root@localhost mnt]# pkill -9 -U "lisi"    '强制终止-9 用户-U lisi的所有进程'
[root@localhost mnt]# 
[root@localhost mnt]# pgrep -l -U "lisi"    '再次检索lisi,发现什么都没有'
[root@localhost mnt]# 
[root@localhost mnt]# which pkill   '查看pkill的命令位置在哪'
/usr/bin/pkill  '在usr下面的bin中,即所有用户都可以使用'

pkill -9 -U 代表强行注销用户

普通用户不可以踢掉pkill root

八、 计划任务管理 at、crond

8.1 at命令

  • 一次性计划任务
[root@localhost mnt]# at [HH:MM] [yyyy-mm-dd]   'at 小时:分钟 年-月-日'
[root@localhost mnt]# date  '查看当前时间'
2019年 11月 12日 星期二 17:30:57 CST
[root@localhost mnt]# at 17:33 2019-11-12   
at> pgrep -U root | wc -l > /opt/test.txt
at>        'ctrl+d,提交任务'
job 1 at Tue Nov 12 17:33:00 2019
[root@localhost mnt]# atq   '查看配置的任务,结果没有'
[root@localhost mnt]# date      '看眼日期'
2019年 11月 12日 星期二 17:33:59 CST  '过时间了'
[root@localhost mnt]# cat /opt/test.txt
180 '出现结果'

这个命令的时间必须是当前时间之后

date 获取当前系统时间

at>后面跟在未来的这个时间要执行的命令

eot 就是按ctrl +D键提交任务

也可以atq查看 ,查看将要指定的执行任务的列表

案例:在当天的21:30时自动关闭当前系统

[root@localhost mnt]# at 21:30 2019-11-12
at> shutdown -h now     '关闭当前系统'
at> 
job 2 at Tue Nov 12 21:30:00 2019
[root@localhost mnt]# atq
2   Tue Nov 12 21:30:00 2019 a root
[root@localhost mnt]# atrm 2    '删除计划任务2'
[root@localhost mnt]# atq

atrm 删除 计划任务

8.2 crontab命令

  • 按照预先设置的时间周期(分时日月周)重复执行用户指定的命令操作
  • 属于周期性计划任务
  • 主要设置文件
    • 全局配置文件,位于文件:/etc/crontab
    • 系统默认的设置,位于目录:/etc/cron.*/
    • 用户定义的设置,位于文件:/var/spool/cron/用户名

8.3 管理cron计划任务

  • 编辑cron计划任务
[root@localhost mnt]# crontab -e [-u 用户名]
  • 查看计划任务
[root@localhost mnt]# crontab -l [-u 用户名]
  • 删除计划任务
[root@localhost mnt]# crontab -r [-u 用户名]

e edit,创建计划任务

-l list 列表

-r 删除

理论:linux进程和计划任务管理

8.4 时间数值的特殊表示方法

符号解释
* 表示该位置的范围内所有时间
表示间隔的多个不连续时间点
- 表示一个连续的时间范围
/n 指定间隔的时间频率为n

8.5 应用实例

示例解释
0 17 1-5 周一到周五每天17点
30 8 1,3,5 每周一周三周五的8点30分
0 8-18/2 * 每天8点到18点之间每隔两小时
0 /3 每三天
[root@localhost mnt]# crontab -e

"/tmp/crontab.16EW6c" 1L, 37C   '自动进入这个文件内配置'

'*/2 * * * *     ps aux | wc -l > /ps.txt'  '输入单引号内的配置' 

:wq             '保存退出'

no crontab for root - using an empty one
crontab: installing new crontab
[root@localhost mnt]# crontab -l    '查看计划任务'
*/2 * * * * ps aux | wc -l > /ps.txt                     

九、 总结

  • 查看进程的命令(ps、top、pgrep、pstree)
  • 进程控制
    • 启动进程
    • 调度进程(Ctrl+z组合键、jobs、bg、fg)
    • 终止进程(kill、killall、pkill)
  • at命令设置计划任务
  • crontab计划任务的配置字段

文章名称:理论:linux进程和计划任务管理
当前网址:http://pwwzsj.com/article/pgjcsg.html