linux 进程和计划任务管理

目录

一、程序与进程的关系

1.1 程序

1.2 进程

二、查看进程

2.1 ps命令----查看静态的进程统计信息

2.1.1 ps -aux

2.1.2 ps -elf

2.2 top命令 ----查看进程的动态信息

 2.3 pgrep命令-----查看进程信息

2.4 jobs命令-----列出后台进程的状态信息 

 2.5 pstree命令--------查看进程树

三、控制进程

3.1 进程的前后台调度

3.1.1 Ctrl +Z 组合键

3.1.2 jobs命令

3.1.3 fg命令

3.2 终止进程运行

3.2.1 Ctrl + C 组合键

3.2.2 kill、killall命令

3.2.3 pkill命令

四、计划任务管理

4.1 at命令 -----一次性计划任务

 4.2 crontab命令-----周期性执行任务

4.2.1 管理crontab计划任务

4.3 crontab 任务配置的格式

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

4.3.2 应用示列


一、程序与进程的关系

1.1 程序

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

1.2 进程

  • 在CPU及内存中运行的程序代码
  • 动态执行的代码
  • 父 、子进程
    • 每个程序可以创建一个或者多个进程

二、查看进程

2.1 ps命令----查看静态的进程统计信息

2.1.1 ps -aux

a:显示终端bai上的所有进程,包括其它用户的进程

u:表示列出进程的用户

x:显示所有终端的进程。

 示列及解释

[root@linianhui ~]# ps -aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.0 194184  7308 ?        Ss   8月11   0:08 /usr/lib/systemd/syste
root          2  0.0  0.0      0     0 ?        S    8月11   0:00 [kthreadd]
root          4  0.0  0.0      0     0 ?        S<   8月11   0:00 [kworker/0:0H]
root          6  0.0  0.0      0     0 ?        S    8月11   0:00 [ksoftirqd/0]
root          7  0.0  0.0      0     0 ?        S    8月11   0:00 [migration/0]
root          8  0.0  0.0      0     0 ?        S    8月11   0:00 [rcu_bh]
root          9  0.0  0.0      0     0 ?        S    8月11   0:23 [rcu_sched]
root         10  0.0  0.0      0     0 ?        S<   8月11   0:00 [lru-add-drain]
root         11  0.0  0.0      0     0 ?        S    8月11   0:00 [watchdog/0]



###各列的解释

USER: 进程的用户。

PID: 进程的ID

%CPU: 进程占用的CPU百分比。

%MEM: 占用内存的百分比。

VSZ: 该进程使用的虚拟内存量(KB)

RSS: 该进程占用的物理内存量(KB)。

TTY: 启动进程的终端名。不是从终端启动的进程则显示为?

STAT:该行程的状态(D:不可中断的休眠状态;R:正在运行状态;S:处于休眠状态,可被唤醒;T:停止状态,可能是在后台暂停或进程处于跟踪调试状态;Z:僵尸进程,进程已经中止,但是部分程序还在内存当中)



扩展:

僵尸进程:

        一个进程结束了,但是如果该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程,因为每个进程结束的时候,系统都会扫描当前系统中所运行的所有进程,看有没有哪个进程是刚刚结束的这个进程的子进程,如果是的话,就由Init来接管它,成为它的父进程,子进程退出后init会回收其占用的相关资源。但是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程。

2.1.2 ps -elf

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

-l: 使用长格式显示进程信息

-f: 使用完整的格式显示进程信息

示列

[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 - 48480 ep_pol 11:14 ?        00:00:03 /usr/lib/sys
1 S root          2      0  0  80   0 -     0 kthrea 11:14 ?        00:00:00 [kthreadd]
1 S root          4      2  0  60 -20 -     0 worker 11:14 ?        00:00:00 [kworker/0:0
1 S root          6      2  0  80   0 -     0 smpboo 11:14 ?        00:00:00 [ksoftirqd/0
1 S root          7      2  0 -40   - -     0 smpboo 11:14 ?        00:00:00 [migration/0
1 S root          8      2  0  80   0 -     0 rcu_gp 11:14 ?        00:00:00 [rcu_bh]
1 S root          9      2  0  80   0 -     0 rcu_gp 11:14 ?        00:00:12 [rcu_sched]
1 S root         10      2  0  60 -20 -     0 rescue 11:14 ?        00:00:00 [lru-add-dra
5 S root         11      2  0 -40   - -     0 smpboo 11:14 ?        00:00:00 [watchdog/0]
5 S root         12      2  0 -40   - -     0 smpboo 11:14 ?        00:00:00 [watchdog/1]
1 S root         13      2  0 -40   - -     0 smpboo 11:14 ?        00:00:01 [migration/1
1 S root         14      2  0  80   0 -     0 smpboo 11:14 ?        00:00:00 [ksoftirqd/1
1 S root         16      2  0  60 -20 -     0 worker 11:14 ?        00:00:00 




### 各列的解释

F:内核分配给进程的系统标记。

S:进程的状态。

UID: 启动这些进程的用户

PID: 进程的进程ID。

PPID: 父进程的进程号(如果该进程是由另一个进程启动的)

C: 进程生命周期中的CPU利用率。

PRI: 进程的优先级(越大的数字代表越低的优先级)

NI: 谦让度值用来参与决定优先级。

ADDR: 进程的内存地址。

SZ: 假如进程被换出,所需交换空间的大致大小。

WCHAN: 若该进程在睡眠,则显示睡眠中的系统函数名,

STIME: 进程启动时的系统时间。

TTY: 进程启动时的终端设备。

TIME: 运行进程需要的累计CPU时间。

CMD: 进程的启动命令。

2.2 top命令 ----查看进程的动态信息

示列

[root@localhost ~]# top
top - 16:47:56 up  5:33,  1 user,  load average: 0.00, 0.01, 0.05
Tasks: 245 total,   1 running, 244 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.1 sy,  0.0 ni, 99.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  7990076 total,  4716052 free,   570816 used,  2703208 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.  7126040 avail Mem

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
     9 root      20   0       0      0      0 S   0.3  0.0   0:12.94 rcu_sched
  1013 root      20   0  324784   6924   5404 S   0.3  0.1   0:19.77 vmtoolsd
 78868 root      20   0       0      0      0 S   0.3  0.0   0:01.03 kworker/4:1
128447 root      20   0  162260   2408   1580 R   0.3  0.0   0:00.09 top
     1 root      20   0  193920   9120   4184 S   0.0  0.1   0:03.78 systemd
     2 root      20   0       0      0      0 S   0.0  0.0   0:00.08 kthreadd
     4 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H
     6 root      20   0       0      0      0 S   0.0  0.0   0:00.10 ksoftirqd/0
     7 root      rt   0       0      0      0 S   0.0  0.0   0:00.11 migration/0


###解析
第一行是任务队列信息
16:47:56 系统时间
up 5:33 系统运行时长
1 user 当前登录用户数
load acerage:0.00,0.01,0.05 系统负载,单位时间内系统处理的任务数,后面三个数值分别为1分钟、五分钟、十五分钟到现在的平均值

第二行是进程信息
Task 总进程数
running 正在运行的进程数
sleeping 休眠的进程数
stopped 中止的进程数
zombie 僵死的进程数

第三行为CPU的信息
us 用户占用
sy 内核占用
ni 优先级调度占用
id 空闲的CPU,要了解空闲的的CPU百分比,主要看%id 部分
wa I/O 等待占用
hi 硬件中断占用
si 软件中断占用
st 虚拟化占用

第四行为内存信息
total 总内存空间
free 空闲内存
used 已用内存
buff/cache 物理内存和交换内存的缓冲区总和

第五行为交换空间信息
total 总交换空间
free 空闲交换空间
used 已用交换空间
avail Mem 可用物理空间

 重点注意

load average 系统CPU负载情况

1min ago   5min ago   15 min ago 

三个点相连  15分钟到现在的系统负载情况>>

当下及未来的时间内,我的系统CPU资源是否吃紧,是否有隐患,同时也是作为优化、监控预处理的依据

top常用命令

c 键:根据CPU使用百分比大小进行排序

q 键:退出top程序

数字1键:显示CPU个数和状态

 2.3 pgrep命令-----查看进程信息

pgrep:

pgrep是一个用于查找进程ID(PID)的命令行工具,它可以根据进程的名字或其他属性来查找对应的PID。pgrep命令通常与其他命令一起使用,如 kill 命令

常用选项

-a:显示进程名和PID

-c:仅显示匹配进程的数量,而不显示进程名和PID

-f:匹配进程名及参数

示列

[root@localhost ~]# pgrep -a ssh    #查看sshd进程的pid
1437 /usr/sbin/sshd -D
2443 sshd: root@pts/0
2449 sshd: root@notty

2.4 jobs命令-----列出后台进程的状态信息 

常用选项

选项说明
-l显示所有后台进程PID
-p显示所有后台进程的进程组ID
-n仅显示最近的后台进程
-r仅显示正在运行的后台进程
-s仅显示已停止的后台进程

 2.5 pstree命令--------查看进程树

以树形结构列出进程信息

pstree -aup

[root@localhost ~]# pstree -aup
systemd,1 --switched-root --system --deserialize 22
  ├─ModemManager,944
  │   ├─{ModemManager},966
  │   └─{ModemManager},996
  ├─NetworkManager,1122 --no-daemon
  │   ├─{NetworkManager},1127
  │   └─{NetworkManager},1131
  ├─VGAuthService,1010 -s


##############################
-a:显示完整信息
-u:列出对应用户名
-p:列出对应PID号

三、控制进程

3.1 进程的前后台调度

3.1.1 Ctrl +Z 组合键

  • 将当前进程挂起,即调入后台并停止执行

3.1.2 jobs命令

  • jobs 【-l】
  • 查看处于后台的任务列表

3.1.3 fg命令

  • 将后台进程恢复到前台运行,可指定任务序号

3.2 终止进程运行

3.2.1 Ctrl + C 组合键

  • 中断正在执行的命令

3.2.2 kill、killall命令

  • kill用于终止指定PID号的进程
  • killall用于终止指定名称相关的所有进程
  • -9选项用于强行终止

我们经常会用到kill命令去杀死一个进程,但是有时会出现kill不成功的现象,这是就要用到kill -9

之所以这两个命令会有区别是因为所发送的信号(Siqna)是不同的。默认情况下kil命令的参数为-15。

kill -15代表的信号为SIGTERM,这是告诉进程你需要被关闭,请自行停止运行并退出

而kill -9代表的信号是SIGKILL,表示进程被终止,需要立即退出,因此ki -9表示强制杀死该进程,这个信号不能被捕获也不能被忽略

3.2.3 pkill命令

  • 根据特定条件终止响应进程
  • 常用命令选项
    • -U:根据进程所属的用户名终止相应进程
    • -t:根据进程所在的终端终止相应进程

[root@localhost ~]# pgrep -l -U "teacher"

3045 bash

[root@localhost ~]# pkill -9 -U " teacher"

[root@localhost ~]# pgrep -l -U " teacher"

四、计划任务管理

4.1 at命令 -----一次性计划任务

at [HH:MM] [yyyy-mm-dd]

 示列

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

[root@localhost ~]# at 21:30             #不携带日期表示当天           

at> shutdown -h now

at><EOT>        #按ctrl + D键提交任务

job 2 at Sun May 7 21:30:00 2017

 4.2 crontab命令-----周期性执行任务

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

4.2.1 管理crontab计划任务

  • 编辑计划任务

crontab -e [-u 用户名]

  •  查看计划任务

crontab -l [-u 用户名]

  • 删除计划任务

crontab -r [-u 用户名]

crontab -l -u         展示当前设定的定时任务

crontab -r -u         删除所有定时任务----使用时慎重

4.3 crontab 任务配置的格式

50         3                2           1             *                        run_command

分钟     小时        日期        月份        日期                    命令或者脚本文件

字段说明
分钟取值为从0到59之间的任意整数
小时取值为从0到23之间的任意整数
日期取值为从1到31之间的任意整数
月份取值为从1到12之间的任意整数
星期取值为从0到7之间的任意整数,0或7代表星期日
命令要执行的命令或者程序脚本

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

  • "*" 表示该范围内任意时间
  • ","表示间隔的多个不连续时间点
  • "-" 表示一个连续的时间范围
  • "/" 指定间隔的时间频率

4.3.2 应用示列

每分钟定时执行一次规则:

每1分钟执行: */1 * * * *或者* * * * *

每5分钟执行: */5 * * * *

每天定时执行一次规则:

每天执行0 0 * * *        --每天的24点执行

每周定时执行一次规则:

每周执行0 0 * * 1        --每周的第一天,24点,执行

5 * * * * |s          指定每小时的第5分钟执行一次ls命令

30 5 * * * ls         指定每天的 5:30 执行ls命令

30 7 8 * * ls        指定每月8号的7:30分执行ls命令

30 6 */10* * |s 每个月中,每隔10天6:30执行一次ls命令[即每月的1、11、21、31日是的6:30执行一次ls命令。

注意

命令或者脚本要写绝对了路径                        可以用which 查询命令的绝对路径

  • 10
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值