Linux进程和计划任务管理

一.进程和线程

1.内核功用

进程管理、内存管理、文件系统、网络功能、驱动程序、安全功能等

对于所有的操作系统,都有基本的功能

2. Process(进程)

运行中的程序的一个副本,是被载入内存的一个指令集合,是资源分配的单位

3.进程ID号

是被用来标记各个进程
UID、GID、和SELinux语境决定对文件系统的存取和访问权限
通常从执行进程的用户来继承
存在生命周期
进程所占用的内存空间由操作系统决定

4.进程的概念

  • 进程(Process )是指计算机中已运行的程序。进程曾经是分时系统的基本运作单位。

  • 进程是正在执行的程序;

  • 进程是可以分配处理器并由处理执行的实体;

5.线程的概念

线程(Thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。——维基

  • 一个进程至少有一个执行线程;

  • 线程也被称为轻量级进程;

  • 线程是进程内部的一部分;

6.进程与线程的区别

  1. 资源分配与调度

    • 进程是资源竞争的基本单位;

    • 线程是程序执行的最小单位;

  2. 资源占有角度

    • 操作系统会为一个进程分配一堆资源,所有的进程之间是独立的,是互不影响的。

    • 线程会共享进程的虚拟地址空间,只拥有一小部分资源,比如自己的线程ID,私有栈空间,自己的上下文数据等。

    • 线程是共享资源,所以一个线程的异常退出会影响整个进程异常退出,并且要注意线程间的同步与互斥问题。

  3. 调度与切换

    • 进程会携带很多资源,所以创建和撤销进程时,代价较大
    • 线程花费代价较小
    • 进程会携带很多资源,所以进程之间的切换或调度时,操作系统要做的工作比较多
    • 线程调度时,工作较少

    类似”进程是资源分配的最小单位,线程是CPU调度的最小单位“这样的回答感觉太抽象,都不太容易让人理解。
    做个简单的比喻:
    线程在进程下行进
    一个进程可以包含多个线程
    不同进程间数据很难共享
    同一进程下不同线程间数据很易共享
    进程要比线程消耗更多的计算机资源
    进程间不会相互影响,一个线程挂掉将导致整个进程挂掉
    进程可以拓展到多机,进程最多适合多核
    进程使用的内存地址可以上锁,即一个线程使用某些共享内存时,
    其他线程必须等它结束,才能使用这一块内存。

7.进程与线程的联系

进程和线程都是操作系统所运行的程序运行的基本单元。

8.查看进程

  1. 常用选项

    -a:显示当前终端下的所有进程信息,包括其他用户的进程。与“x”选项结合时将显示系统中所有的进程信息。
    -u:使用以用户为主的格式输出进程信息。
    -x:显示当前用户在所有终端下的进程信息。

  2. ps -aux --以简单列表的形式显示出进程信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KhHgOPpb-1631634391007)(../../AppData/Roaming/Typora/typora-user-images/image-20210914225857272.png)]

USER:启动该进程的用户账号的名称。
PID:该进程在系统中的数字 ID 号,在当前系统中是唯一的。
%CPU:CPU 占用的百分比。
%MEM:内存占用的百分比。
VSZ:该进程使用的虚拟内存量(KB)。
RSS:该进程占用的物理内存量(KB)。
TTY:表明该进程在哪个终端上运行。不是从终端启动的进程则显示为?。
   简说:pts 是远程登录终端 ctrl+ALT F1-F6   tty1 图像界面   26 字符界面    ? 系统本身自身执行的进程

STAT:该进程的状态(D:不可中断的休眠状态:R:正在运行状态;S:处于休眠状态,可被唤醒;T:停止状态,可能是在后台暂停或进程处于跟踪调试状态: Z:僵尸进程,进程已经中止,但是部分程序还在内存当中)。
D:系统守护进程
T:调式、程序执行一般停止
R :该程序目前正在运作,或者是可被运作;
S :该程序目前正在睡眠当中 (可说是 idle 状态啦!),但可被某些讯号(signal) 唤醒。T :该程序目前正在侦测或者是停止了;
Z :该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (疆尸) 程序的状态D 不可中断状态.
它们含意如下::
进程状态。常见的状态有以下几种:
-D:不可被唤醒的睡眠状态,通常用于 I/O 情况。
-R:该进程正在运行。
-S:该进程处于睡眠状态,可被唤醒。
-T:停止状态,可能是在后台暂停或进程处于除错状态。
-W:内存交互状态(从 2.6 内核开始无效)。
-X:死掉的进程(应该不会出现)。
-Z:僵尸进程。进程已经中止,但是部分程序还在内存当中。
-<:高优先级(以下状态在 BSD 格式中出现)。
-N:低优先级。
-L:被锁入内存。
-s:包含子进程。
-l:多线程(小写 L)。
-+:位于后台。
-C:进程占用CPU的百分比

START:启动该进程的时间。
TIME:该进程占用的 CPU 时间。
COMMAND:启动该进程的命令的名称
  1. ps -elf —以长格式显示系统中的进程信息
  • -e:显示系统内的所有进程信息。
    -l:使用长格式显示进程信息。
    -f:使用完整的格式显示进程信息。.

在这里插入图片描述


F:内核分配给进程的系统标记。
S:进程的状态。
UID:启动这些进程的用户。
PID: 进程的进程ID.
PPID:父进程的进程号(如果该进程是由另一“个进程启动的)
C:进程生命周期中的CPU利用率。
PRI:进程的优先级(越大的数字代表越低的优先级)。
NI: 谦让度值用来参与决定优先级。
ADDR:进程的内存地址。
SZ:假如进程被换出,所需交换空间的大致大小。
WCHAN:若该进程在睡眠,则显示睡眠中的系统函数名。
STIME:进程启动时的系统时间。
TTY:进程启动时的终端设备。   pts/0255代表虚拟终端,一般是远程连接的终端;tty1tty7 代表本地控制台终端
TIME:运行进程需要的累计CPU时间。
CMD:进程的启动命令。
  1. 僵尸进程

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

  1. top命令–查看进程动态信息

在这里插入图片描述

系统任务(Tasks)、CPU占用、内存占用(Mem)、交换空间(Swap)
23:07:19 当前时间 
up...系统运行时间 
4uesrs 当前登录用户数
load average:0.00,0.01,0.05系统负载,即任务队列的平均长度。 三个数值分别为 1 分钟、5 分钟、15 分钟前到现在的平均值。


测试:
终端一:执行:top
终端二:dd if=/dev/zero of=/a.txt count=10 bs=100M
终端三:dd if=/dev/zero of=/a.txt count=10 bs=100M

PID	进程 id
USER	进程所有者的用户名
PR	优先级(由内核动态调整),用户不能
NI	进程优先级。 nice 值。负值表示高优先级,正值表示低优先级,用户可以自己调整

VIRT(virtual memory usage)	虚拟内存,是进程正在使用的所有内存(ps 中标为 VSZ) VIRT:virtual memory usage 虚拟内存
1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等
2、假如进程申请 100m 的内存,但实际只使用了 10m,那么它会增长
100m,而不是实际的使用量


RES(resident memory usage)	是进程所使用的物理内存。实际实用内存(ps 中标为 RSS) RES:resident memory usage 常驻内存
1、进程当前使用的内存大小,但不包括 swap out
2、包含其他进程的共享
3、如果申请 100m 的内存,实际使用 10m,它只增长 10m,与 VIRT 相反
4、关于库占用内存的情况,它只统计加载的库文件所占内存大小


SHR	共享内存大小,单位 kb SHR:shared memory 共享内存
1、除 M 了自身进程的共享内存,也包括其他进程的共享内存
2、虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小
3、计算某个进程所占的物理内存大小公式:RES – SHR 4、swap out 后,它将会降下来


S	进程状态。
D=不可中断的睡眠状态
R=运行中或可运行S=睡眠中
T=已跟踪/已停止Z=僵停

%CPU	上次更新到现在的 CPU 时间占用百分比
%MEM	进程使用的物理内存百分比
TIME+	进程使用的 CPU 时间总计,单位 1/100 秒
COMMAND	命令名/命令行

top 命令全屏操作界面快捷键:
默认 3s 刷新一次,按 s 修改刷新时间按空格 :立即刷新。
P:按 CPU 排序
M:按内存排序
T:按时间排序
p: 进程 IP,查看某个进程状态
N 键根据启动时间进行排序
数字键 1:显示每个内核的 CPU 使用率u/U:指定显示的用户
h:可以获得 top 程序的在线帮助信息
q:键可以正常地退出 top 程序

注:若通过 top 排名工具发现某个进程 CPU 占用率非常高,需要终止该进程的运行,可以在 top 操作界面中按 k 键,然后在列表上方将会出现“PID to signal/kill [default pid = 3180]:” 的提示信息,根据提示输入指定进程的 PID 号并按 Enter 键, 出现“Send pid 5597 signal [15/sigterm]”的二次确认的提示信息,然后按Enter 键确认即可终止对应的进程。

  1. pgrep 命令查询进程信息

    • 常用参数:

      -l:选项可同时输出对应的进程名以及PID
      -U:选项查询特定用户的进程
      -t:选项查询在特定终端运行的进程

  2. pstree 命令 以树形结构列出进程信息

    pstree 命令默认情况下只显示各进程的名称,
    结合以下常用的参数使用:
    -p:选项使用时可以同时列出对应的PID号
    -u:选项可以列出对应的用户名
    -a:选项可以列出完整的命令信息

9.控制进程

  • 手动启动进程

由用户手工输入命令或者可执行程序的路径,可以至少启动一个进程。根据该进程是否 需要占用当前的命令终端,手工启动又可以分为前台启动和后台启动。
进程在前台运行
(如执行“ls -l”命令)时,用户必须等到该进程执行结束并退出以后才能继续输入其他命令,大多数命令操作在前台启动运行。进程在后台运行时,用户可以继续在当前终端中输入其他命令,而无须等待该进程结束,适用于运行耗时较长的操作。

启动后台进程需要使用“&”操作符,将“&”操作符放在要执行命令的最后面,进程启动后会直接放入后台运行,而不占用前台的命令操作界面,方便用户进行其他操作。例如,当使 用 cp 命令从光盘中制作镜像文件时,由于需要复制的数据较多,耗时较长,因此可结合“&” 符号将复制操作放到后台运行,以便用户可以继续执行其他命令操作

cp /dev/cdrom /home/cetos7.iso &

  • 调度启动进程

在服务器维护工作中,经常需要执行一些比较费时而且较占用资源的任务(如数据备份),这些任务更适合在相对空闲的时候(如夜间)进行。这时就需要用户事先进行调度安排,指 定任务运行的时间,当系统到达设定时间时会自动启动并完成指定的任务。调度启动的计划 任务进程均在后台运行,不会占用用户的命令终端。
进程的调度启动可以通过 at、crontab 命令进行设置,其中 at 命令用于设置一次性(如12:15 时重启网络服务)计划任务,crontab 命令用于设置周期性运行(如每周五 17:30 备份数据库)的计划任务。

  • 挂起当前进程

当Linux操作系统中的命令正在前台执行时(运行尚未结束),按Ctrl+Z组合键可以将当前进程挂起(调入后台并停止执行),这种操作在需要暂停当前进程并进行其他操作时特别有用。例如,打包usr并且调入后台 ,可以按 Ctrl+Z 组合键将该下载任务调入后台并暂停执行tar zcvf usr.tar.gz /usr

  • 终止程序执行

    • Ctrl +C 组合键:中断正在执行的命令

    • kill,killall 命令

      • kill用于终止指定PID号的进程
      • killall用于终止指定名称相关的所有进程
      • -9选项用于强制终止
    • pkill命令:根据特定条件终止对应的进程

      • -U 根据进程所属的用户名终止相应进程;
      • -t 根据进程所在的终端终止相应进程。

二.计划任务管理

1.at命令 --设置一次性计划任务

[root@localhost ~]# date                              #查看日期
2021 08 17 星期二 21:01:56 CST
[root@localhost ~]# at 21:06 2021-08-17               #设置计划时间
at> pgrep -U root |wc -l >/tmp/ps.root                #设置计划
at> <EOT>                                             #ctrl+d 提交
job 2 at Tue Aug 17 21:06:00 2021
[root@localhost ~]# atq                               #查询计划
2	Tue Aug 17 21:06:00 2021 a root
[root@localhost ~]# atrm 2                            #删除计划
[root@localhost ~]# atq

2.crontab 命令–设置周期性 计划任务

按照预先设置的时间周期(分钟、小时、天…)重复执行用户指定的命令操作
属于周期性计划任务

主要设置文件
全局配置文件,位于文件:/etc/crontab

系统默认的设置,位于目录: /etc/cron.*/
用户定义的设置,位于文件: /varlspool/cron/用户名

  • 常用选项

    -e:编辑计划任务列表。
    -u:指定所管理的计划任务属于哪个用户,默认是针对当前用户(自己)
    -l:列表显示计划任务。
    -r:删除计划任务列表。

  • 命令格式

    在这里插入图片描述

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

    * 表示该范围内的任意时间

    , 表示间隔的多个不连续时间点

    - 表示一个连续的时间范围

    / 指定间隔的时间频率

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值