Linux进程与任务计划管理

Linux进程与任务计划管理程序和进程的关系 1.程序 保存在硬盘,光盘等介质中的可执行代码和数据 文件中静态保存的代码 2.进程 在cpu及内存中运行的程序代码 动态执行的代码 父,子进程 每个程序可以创建一个或多个进程  

程序和进程的关系

1.程序

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

文件中静态保存的代码

2.进程

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

动态执行的代码

父,子进程

每个程序可以创建一个或多个进程

 

补充:

进程:资源分配的最小单位

线程:程序执行的最小单位

 

进程:是程序执行时的一个实例,即它是程序已经执行到课中程度的数据结构的汇集。从内核的观点看,进程的目的就是担当分配系统资源(cpu时间,内存等)的基本单位

线程:是cpu调度的最小单位(程序执行流的最小单位),它被包含在进程之中,是进程中的实际运作单元。一条线程是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务

 

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

但是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程

总的来说:进程有独立的地址空间,线程没有单独的地址空间(同一进程内的线程共享进程的地址空间)

 

查看进程:ps命令

ps 即 process state,可以进程当前状态的快照,默认显示当前终端中的进程,Linux系统各进程的相关信息均保存在/proc/数字 目录下的各文件中

查看静态的进程统计信息

ps [选项]

支持三种选项:

  1. UNIX选项 如: -A -e
  2. GNU选项 如: –help
  3. BSD选项 如: a
  • “ps aux” 可以查看系统中所有的进程;
  • “ps -le” 可以查看系统中所有的进程,而且还能看到进程的父进程的 PID 和进程优先级;
  • “ps -l” 只能看到当前 Shell 产生的进程;

常用选项

  • a:显示当前终端下的所有进程信息,包括其他用户的进程。与“x”选项结合时将示系统中所有的进程信息。
  • u:使用以用户为主的格式输出进程信息。
  • x:显示当前用户在所有终端下的进程信息。
  • -e:显示系统内的所有进程信息。
  • -l:使用长(Long)格式显示进程信息。
  • -f:使用完整的(Full)格式显示进程信
  • k|–sort 属性 对属性排序,属性前加 – 表示倒序

方法一:

查看静态的进程统计信息

  • ps aux

Snipaste_2022-03-15_14-16-37.png

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

  • u: 表示列出进程的用户

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

Snipaste_2022-03-15_14-19-00.png 各列解释:

表头 含义
USER 该进程是由哪个用户产生的。
PID 进程的 ID。
%CPU 该进程占用 CPU 资源的百分比,占用的百分比越高,进程越耗费资源。
%MEM 该进程占用物理内存的百分比,占用的百分比越高,进程越耗费资源。
VSZ 该进程占用虚拟内存的大小,单位为 KB。
RSS 该进程占用实际物理内存的大小,单位为 KB。
TTY 该进程是在哪个终端运行的。其中,tty1 ~ tty7 代表本地控制台终端(可以通过 Alt+F1 ~ F7 快捷键切换不同的终端),tty1~tty6 是本地的字符界面终端,tty7 是图形终端。pts/0 ~ 255 代表虚拟终端,一般是远程连接的终端,第一个远程连接占用 pts/0,第二个远程连接占用 pts/1,依次増长。
STAT 进程状态。常见的状态有以下几种: -D:不可被唤醒的睡眠状态,通常用于 I/O 情况。 -R:该进程正在运行。 -S:该进程处于睡眠状态,可被唤醒。 -T:停止状态,可能是在后台暂停或进程处于除错状态。 -W:内存交互状态(从 2.6 内核开始无效)。 -X:死掉的进程(应该不会出现)。 -Z:僵尸进程。进程已经中止,但是还是占用硬件资源。 -<:高优先级(以下状态在 BSD 格式中出现)。 -N:低优先级。 -L:被锁入内存。 -s:包含子进程。 -l:多线程(小写 L)。 -+:位于后台。
START 该进程的启动时间。
TIME 该进程占用 CPU 的运算时间,注意不是系统时间。
COMMAND 产生此进程的命令名。

方法二:

查看静态的进程统计信息

  • ps -elf

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

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

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

Snipaste_2022-03-15_14-20-32.png

Snipaste_2022-03-15_14-23-27.png 各列解释:

表头 含义
F 进程标志,说明进程的权限,常见的标志有两个: 1:进程可以被复制,但是不能被执行;4:进程使用超级用户权限;
S 进程状态。具体的状态和”psaux”命令中的 STAT 状态一致;
UID 运行此进程的用户的 ID;
PID 进程的 ID;
PPID 父进程的 ID;
C 该进程的 CPU 使用率,单位是百分比;
PRI 进程的优先级,数值越小,该进程的优先级越高,越早被 CPU 执行;系统定义不可以人为修改
NI 进程的优先级,数值越小,该进程越早被执行;可以人为修改
ADDR 该进程在内存的哪个位置;
SZ 该进程占用多大内存;
WCHAN 该进程是否运行。”-“代表正在运行;
TTY 该进程由哪个终端产生;
TIME 该进程占用 CPU 的运算时间,注意不是系统时间;
CMD 产生此进程的命令名;

查看进程信息:top

查看动态的进程排名信息

            top

查看动态的进程排名信息

top 命令的输出内容是动态的,默认每隔 3 秒刷新一次。

命令的输出主要分为两部分:

  1. 第一部分是前五行,显示的是整个系统的资源使用状况,我们就是通过这些输出来判断服务器的资源使用状态的。
  2. 第二部分从第六行开始,显示的是系统中进程的信息。 Snipaste_2022-03-15_14-33-38.png

进程动态行

image.png

进程信息区

Snipaste_2022-03-15_14-35-33.png

  • PID:进程的 ID。
  • USER:该进程所属的用户。
  • PR:优先级,数值越小优先级越高。
  • NI:优先级,数值越小、优先级越高。
  • VIRT:该进程使用的虚拟内存的大小,单位为 KB。
  • RES:该进程使用的物理内存的大小,单位为 KB。
  • SHR:共享内存大小,单位为 KB。
  • S:进程状态。
  • %CPU:该进程占用 CPU 的百分比。
  • %MEM:该进程占用内存的百分比。
  • TIME+:该进程共占用的 CPU 时间。
  • COMMAND:进程的命令名。

image.png

常用命令

image.png

  • tty终端

  • Centos7系统,tty1表示图形界面,tty2-tty6表示文字界面,可以用Ctrl+Alt+F1-F6切换

  • pts说明是用远程工具连接的,比如xshell,后面的数字代表登录的时间顺序,越小证明登录的越早

  • 查看线程 top -H;ps -T

查看进程信息:pgrep

查看指定的进程

  • -U 指定用户
  • -l: 显示进程名
  • -a: 显示完整格式的进程名
  • -P pid: 显示指定进程的子进程

示例:

[root@test ~]# pgrep -l "log"
# 显示进程名
435 xfs-log/dm-0
713 xfs-log/sda1
790 xfs-log/md5
877 systemd-logind
885 abrt-watch-log
886 abrt-watch-log
890 rsyslogd
[root@test ~]# pgrep -l -U hope
#指定用户

Snipaste_2022-03-15_14-58-57.png

查看指定的进程:prtstat命令

格式:

 prtstat [选项] [PID|USER]

常用选项

-r :格式显示(raw)

– 示例

[root@localhost ~]# prtstat 1
Process: systemd State: S (sleeping)
  CPU#:  1 TTY: 0:0 Threads: 1
Process, Group and Session IDs
  Process ID: 1 Parent ID: 0
    Group ID: 1 Session ID: 1
  T Group ID: -1

Page Faults
  This Process    (minor major):    23637        61
  Child Processes (minor major):   445262       225
CPU Times
  This Process    (user system guest blkio):   0.13   0.88   0.00   0.08
  Child processes (user system guest):         1.03   1.45   0.00
Memory
  Vsize:       198 MB    
  RSS: 7000 kB RSS Limit: 18446744073709 MB
  Code Start: 0x557f40c9c000 Code Stop:  0x557f40de5840
  Stack Start: 0x7ffc86deebc0
  Stack Pointer (ESP): 0x7ffc86deddc0    Inst Pointer (EIP): 0x7f4dd0af6923
Scheduling
  Policy: normal
  Nice: 0 RT Priority: 0 (non RT)

Snipaste_2022-03-23_09-55-08.png

– prtstat -r,格式显示

[root@localhost ~]# prtstat -r 1
         pid: 1 comm: systemd
       state: S ppid: 0
        pgrp: 1 session: 1
      tty_nr: 0 tpgid: -1
       flags: 402100 minflt: 23643
     cminflt: 447409 majflt: 61
     cmajflt: 225 utime: 13
       stime: 89 cutime: 105
      cstime: 145 priority: 20
        nice: 0 num_threads: 1
 itrealvalue: 0 starttime: 3
       vsize: 198348800 rss: 1709
      rsslim: 18446744073709551615 startcode: 94005036171264
     endcode: 94005037520960 startstack: 140722571242432
     kstkesp: 7FFC86DEDDC0 kstkeip: 7F4DD0AF6923
       wchan: 18446744071581251950 nswap: 0
      cnswap: 18446744071581251950 exit_signal: 17
   processor: 1 rt_priority: 0
      policy: 0 delayaccr_blkio_ticks: 8
  guest_time: 0 cguest_time: 0

Snipaste_2022-03-23_09-57-29.png

以树形结构列出进程信息:pstree

格式:

pstree   [选项] [ PID | USER ]                                                   

常用选项

  • -a:显示启动每个进程对应的完整指令,包括启动进程的路径、参数等。

  • -p:显示PID。

  • -p < pid> : 显示指定进程及其子进程,同时显示每个进程的PID。

  • -u:显示进程的用户名称。

  • -u 用户名:显示指定用户的进程。

  • -H < pid>:高亮显示指定进程及其前辈进程。

  • -T:不显示线程thread,默认显示线程。

示例:

Snipaste_2022-03-15_15-00-54.png

列举被打开的文件:lsof

lsof 命令,“list opened files”的缩写,直译过来,就是列举系统中已经被打开的文件。通过 lsof 命令,我们就可以根据文件找到对应的进程信息,也可以根据进程信息找到进程打开的文件。

lsof [选项]
选项 功能
-c 字符串 只列出以字符串开头的进程打开的文件。
+d 目录名 列出某个目录中所有被进程调用的文件。
-u 用户名 只列出某个用户的进程打开的文件。
-p pid 列出某个 PID 进程打开的文件。

示例:

[root@localhost ~]# lsof | more
#查询系统中所有进程调用的文件
[root@localhost ~]# lsof -p 1
#查询以1为PID进程打开的文件

Snipaste_2022-03-17_09-15-38.png

Snipaste_2022-03-17_09-17-36.png

监控系统资源:vmstat

如果你想动态的了解一下系统资源的使用状况,以及查看当前系统中到底是哪个环节最占用系统资源,就可以使用 vmstat 命令。

vmstat命令,是 Virtual Meomory Statistics(虚拟内存统计)的缩写,可用来监控 CPU 使用、进程状态、内存使用、虚拟内存使用、硬盘输入/输出状态等信息。

第一种方法

[root@localhost ~]# vmstat [-a] [刷新延时 刷新次数]

[root@localhost proc]# vmstat 1 3
#使用vmstat检测,每隔1秒刷新一次,共刷新3次

Snipaste_2022-03-23_10-09-36.png Snipaste_2022-03-15_15-09-32.png

字段 含义
procs 进程信息字段: -r:等待运行的进程数,数量越大,系统越繁忙。 -b:不可被唤醒的进程数量,数量越大,系统越繁忙。
memory 内存信息字段: -swpd:虚拟内存的使用情况,单位为 KB。 -free:空闲的内存容量,单位为 KB。-buff:缓冲的内存容量,单位为 KB。-cache:缓存的内存容量,单位为 KB。
swap 交换分区信息字段: -si:从磁盘中交换到内存中数据的数量,单位为 KB。 -so:从内存中交换到磁盘中数据的数量,单位为 KB。这两个数越大,表明数据需要经常在磁盘和内存之间进行交换,系统性能越差。
io 磁盘读/写信息字段: -bi:从块设备中读入的数据的总量,单位是块。 -bo:写到块设备的数据的总量,单位是块。这两个数越大,代表系统的 I/O 越繁忙。
system 系统信息字段: -in:每秒被中断的进程次数。 -cs:每秒进行的事件切换次数。这两个数越大,代表系统与接口设备的通信越繁忙。
cpu CPU信息字段: -us:非内核进程消耗 CPU 运算时间的百分比。 -sy:内核进程消耗 CPU 运算时间的百分比。 -id:空闲 CPU 的百分比。 -wa:等待 I/O 所消耗的 CPU 百分比。 -st:被虚拟机所盗用的 CPU 百分比

通过分析 vmstat 命令的执行结果,可以获得一些与当前 Linux 运行性能相关的信息。比如说:

  • r 列表示运行和等待 CPU 时间片的进程数,如果这个值长期大于系统 CPU 的个数,就说明 CPU 不足,需要增加 CPU。
  • swpd 列表示切换到内存交换区的内存数量(以 kB 为单位)。如果 swpd 的值不为 0,或者比较大,而且 si、so 的值长期为 0,那么这种情况下一般不用担心,不用影响系统性能。
  • cache 列表示缓存的内存数量,一般作为文件系统缓存,频繁访问的文件都会被缓存。如果缓存值较大,就说明缓存的文件数较多,如果此时 I/O 中 bi 比较小,就表明文件系统效率比较好。
  • 一般情况下,si(数据由硬盘调入内存)、so(数据由内存调入硬盘) 的值都为 0,如果 si、so 的值长期不为 0,则表示系统内存不足,需要增加系统内存。
  • 如果 bi+bo 的参考值为 1000 甚至超过 1000,而且 wa 值较大,则表示系统磁盘 I/O 有问题,应该考虑提高磁盘的读写性能。
  • 输出结果中,CPU 项显示了 CPU 的使用状态,其中当 us 列的值较高时,说明用户进程消耗的 CPU 时间多,如果其长期大于 50%,就需要考虑优化程序或算法;sy 列的值较高时,说明内核消耗的 CPU 资源较多。通常情况下,us+sy 的参考值为 80%,如果其值大于 80%,则表明可能存在 CPU 资源不足的情况。

总的来说,vmstat 命令的输出结果中,我们应该重点注意 procs 项中 r 列的值,以及 CPU 项中 us 列、sy 列和 id 列的值。

第二种方法

格式:

[root@localhost ~]# vmstat [选项] 
  • 下表罗列出了 vmstat 命令的第二种基本格式中常用的选项及各自的含义。
    选项 含义
    -fs -f:显示从启动到目前为止,系统复制(fork)的程序数,此信息是从 /proc/stat 中的 processes 字段中取得的。 -s:将从启动到目前为止,由一些事件导致的内存变化情况列表说明。
    -S 单位 令输出的数据显示单位,例如用 K/M 取代 bytes 的容量。
    -d 列出硬盘有关读写总量的统计表。
    -p 分区设备文件名 查看硬盘分区的读写情况。

Snipaste_2022-03-23_14-51-24.png

进程启动方式(控制进程)

1、手工启动

  •  前台启动:用户输入命令,直接执行程序
  •  后台启动:在命令行尾加入“&”符号

“命令 &”,把命令放入后台执行

把命令放入后台的方法是在命令后面加入 空格 &。使用这种方法放入后台的命令,在后台处于执行状态。

注意,放入后台执行的命令不能与前台有交互,否则这个命令是不能在后台执行的

例子:使用sleep命令查看前台启动和后台启动区别

前台运行:

Snipaste_2022-03-23_15-39-21.png

Snipaste_2022-03-23_15-40-07.png

后台运行:

Snipaste_2022-03-23_15-43-20.png

调度启动

  • 使用at命令,设置一次性计划任务。
  • 使用crontab命令,设置周期性计划任务。

调度启动在下文 ” 8 计划任务管理 “ 中详细介绍。

进程的前后台调度(作业控制)

命令:

&                 //在命令行尾加入“&”符号,把命令放到后台执行。
 
 Ctrl+Z 组合键     //将当前进程挂起,即调入后台并停止执行。
 
 jobs             //查看处于后台的任务列表。
 
 fg 任务序号       //将后台进程恢复到前台运行,可指定任务序号。
 
 bg 任务序号       //将一个在后台暂停的任务,变成继续执行。

示例:

  1. &
[root@localhost etc]# sleep 60 &
[1] 54364

Snipaste_2022-03-23_16-04-48.png

  1. Ctrl+Z组合键
  •  将当前进程挂起,即调入后台并停止执行

Snipaste_2022-03-15_15-33-31.png

  1. 处于后台的任务:jobs
 jobs 【- l】

Snipaste_2022-03-15_15-34-37.png

  1. 恢复挂起命令到前台执行:fg
fg 1

Snipaste_2022-03-15_15-35-49.png

  1. bg 任务序号,将一个在后台暂停的任务,变成继续执行
[root@localhost 9527]# dd if=/dev/zero of=/data/11 bs=1G count=5  //执行后,使用ctrl+z将该进程挂起
^Z
[1]+  已停止               dd if=/dev/zero of=/data/11 bs=1G count=5
[root@localhost 9527]# jobs                   //查看后台任务列表,任务是停止状态
[1]+  已停止               dd if=/dev/zero of=/data/11 bs=1G count=5
[root@localhost 9527]# bg 1                  //让暂停的后台任务,变成继续执行
[1]+ dd if=/dev/zero of=/data/11 bs=1G count=5 &
[root@localhost 9527]# jobs                  //查看任务列表,进程是运行状态
[1]+  运行中               dd if=/dev/zero of=/data/11 bs=1G count=5 &
[root@localhost 9527]# 记录了5+0 的读入       //已经完成了运行的进程
记录了5+0 的写出
5368709120字节(5.4 GB)已复制,15.9937 秒,336 MB/秒

Snipaste_2022-03-23_16-37-57.png

进程的优先级设置

每个CPU在一个时间点上只能处理一个进程,通过时间分片技术,来同时运行多个进程。每个进程都有相应的优先级,优先级决定它何时运行和接收多少 CPU 时间。

在 Linux 系统中,表示进程优先级的有两个参数:Priority 和 Nice。数值越小,优先级越高,该进程越优先被 CPU 处理。

不过,PRI值是由内核动态调整的,用户不能直接修改。所以我们只能通过修改 NI 值来影响 PRI 值,间接地调整进程优先级。

PRI 和 NI 的关系如下:

 PRI (最终值) = PRI (原始值) + NI

所有的优先级范围为0-139,一共140个优先级,数值越低优先级越高

image.png

优先级范围100-139称为静态优先级,这个范围里的进程属于非实时进程,调度方式是:SCHED_OTHER,也就是SCHED_OTHER,使用CFS算法调度(时间片)

优先级范围0-99称为动态优先级,这个范围里的进程属于实时进程,调度方式有:SCHED_FIFO和SCHED_RR(默认); SCHED_FIFO:高优先级会抢占低优先级,高优先级运行期间,低优先级没法抢占,只能等到高优先级主动退出;对于同等优先级,先运行的进程会一直占据cpu, 只有等到先运行的进程主动退出,后续进程才能得到时间片。 SCHED_RR:高优先级会抢占低优先级,高优先级运行期间,低优先级没法抢占,只能等到高优先级主动退出;对于同等优先级的进程,各个进程会轮流运行一定的时间片(大约100ms)。

通过ps查看,大部分的普通进程的PRI=80,而不是认为的120,这是因为ps的计算方法是-40~99是整个进程优先级范围,而60~99是普通进程,-40~59是实时进程; TOP命令显示非RT线程时,PR字段的取值是把task的prio减去100,所以看到的值是0~39

修改 NI 值时有几个注意事项:

  • NI 范围是 -20~19。
  • 普通用户调整 NI 值的范围是 0~19,而且只能调整自己的进程。
  • 普通用户只能调高 NI 值,而不能降低。如原本 NI 值为 0,则只能调整为大于 0。
  • 只有 root 用户才能设定进程 NI 值为负值,而且可以调整任何用户的进程。

nice命令——启动具有不同nice级别的进程

启动进程时,进程通常会继承父进程的nice级别,默认为0。

可以在启动程序时,加上nice命令来设置程序运行的优先级

命令格式:

nice -n 优先级别 执行命令

示例: 将nice级别为-1

[root@localhost ~]# nice -n -5 dd if=/dev/zero of=/data/11 bs=1G count=5 & //启动程序时,设置nice级别为-1  
[2] 29289  
[root@localhost ~]# top -p 29289

Snipaste_2022-03-23_17-03-42.png

renice命令——更改现有进程的nice级别

命令格式:

 renice -n 优先级 -p PID    //修改现有进程的nice级别

示例: 先使用top命令查看sshd进程pid为1965,nice级别为0,使用renice命令修改成-5

Snipaste_2022-03-23_17-11-42.png

 [root@localhost ~]# renice -n -5 -p 1965   //将sshd进程的nice级别修改为-5
 1965 (进程 ID) 旧优先级为 0,新优先级为 -5
 [root@localhost ~]# top -p 1965             //修改后的nice级别为-5

Snipaste_2022-03-23_17-18-54.png

Snipaste_2022-03-23_17-19-49.png

结束进程 

1. ctrl+c组合键

ctrl+c,结束进程,中断正在执行的命令

[root@localhost 9527]# dd if=/dev/zero of=/data/11 bs=1G count=5
^C记录了0+1 的读入       //ctrl+c组合键中断了dd指令
记录了0+0 的写出
0字节(0 B)已复制,0.597625 秒,0.0 kB/秒

Snipaste_2022-03-23_16-42-23.png

2.kill、killall命令

image.png

2.1 kill

kill 从字面来看,就是用来杀死进程的命令,但事实上,这个或多或少带有一定的误导性。从本质上讲,kill 命令只是用来向进程发送一个信号,至于这个信号是什么,是用户指定的。

也就是说,kill 命令的执行原理是这样的,kill 命令会向操作系统内核发送一个信号(多是终止信号)和目标进程的 PID,然后系统内核根据收到的信号类型,对指定进程进行相应的操作。

kill [信号] PID 
kill 命令是按照 PID 来确定进程的,所以 kill 命令只能识别 PID,而不能识别进程名。Linux 定义了几十种不同类型的信号,读者可以使用 kill -l 命令查看所有信号及其编号,这里仅列出几个常用的信号
信号编号 信号名 含义
0 EXIT 程序退出时收到该信息。
1 HUP 挂掉电话线或终端连接的挂起信号,这个信号也会造成某些进程在没有终止的情况下重新初始化。
2 INT 表示结束进程,但并不是强制性的,常用的 “Ctrl+C” 组合键发出就是一个 kill -2 的信号。
3 QUIT 退出。
9 KILL 杀死进程,即强制结束进程。
11 SEGV 段错误。
15 TERM 正常结束进程,是 kill 命令的默认信号。

示例:

Snipaste_2022-03-23_17-31-28.png

2.2killall

killall 也是用于关闭进程的一个命令,但和 kill 不同的是,killall 命令不再依靠 PID 来杀死单个进程,而是通过程序的进程名来杀死一类进程,也正是由于这一点,该命令常与 ps、pstree 等命令配合使用

killall [选项] [信号] 进程名
  • -i:交互式,询问是否要杀死某个进程;
  • -I:忽略进程名的大小写;

Snipaste_2022-03-23_17-36-34.png

3. pkill

当作于管理进程时,pkill 命令和 killall 命令的用法相同,都是通过进程名杀死一类进程,该命令的基本格式如下:

pkill [信号] 进程名
信号编号 信号名 含义
0 EXIT 程序退出时收到该信息。
1 HUP 挂掉电话线或终端连接的挂起信号,这个信号也会造成某些进程在没有终止的情况下重新初始化。
2 INT 表示结束进程,但并不是强制性的,常用的 “Ctrl+C” 组合键发出就是一个 kill -2 的信号。
3 QUIT 退出。
9 KILL 杀死进程,即强制结束进程。
11 SEGV 段错误。
15 TERM 正常结束进程,是 kill 命令的默认信号。

pkill命令踢出登陆用户

 pkill [-t 终端号] 进程名
 
-U:根据进程所属的用户名终止相应进程
-t:根据进程所在的终端终止相应进程

使用 killall 命令时,不知道大家发现没有,通过 killall 命令杀死 sshd 进程的方式来踢出用户,非常容易误杀死进程,要么会把 sshd 服务杀死,要么会把自己的登录终端杀死。

所以,不管是使用 kill 命令按照 PID 杀死登录进程,还是使用 killall 命令按照进程名杀死登录进程,都是非常容易误杀死进程的,而使用 pkill 命令则不会

w
#使用w命令查询本机已经登录的用户
pkill -9 -t pts/1
#强制杀死从pts/1虚拟终端登陆的进程

[root@localhost ~]#pgrep -l -u "zhangsan"
4491 bash
[root@localhost ~]#pkill -9 -U zhangsan
[root@localhost ~]#pgrep -l -u "zhangsan"

任务计划管理

一次性任务设置at

at 工具

  1. 由包 at 提供
  2. 依赖与atd服务,需要启动才能实现at任务
  3. at队列存放在/var/spool/at目录中,ubuntu存放在/var/spool/cron/atjobs目录下
  4. 执行任务时PATH变量的值和当前定义任务的用户身份一致

at 命令的访问控制是依靠 /etc/at.allow(白名单)和 /etc/at.deny(黑名单)这两个文件来实现的,具体规则如下:

  • 如果系统中有 /etc/at.allow 文件,那么只有写入 /etc/at.allow 文件(白名单)中的用户可以使用 at 命令,其他用户不能使用 at 命令(注意,/etc/at.allow 文件的优先级更高,也就是说,如果同一个用户既写入 /etc/at.allow 文件,又写入 /etc/at.deny 文件,那么这个用户是可以使用 at 命令的)。
  • 如果系统中没有 /etc/at.allow 文件,只有 /etc/at.deny 文件,那么写入 /etc/at.deny 文件(黑名单)中的用户不能使用 at 命令,其他用户可以使用 at 命令。不过这个文件对 root 用户不生效。
  • 如果系统中这两个文件都不存在,那么只有 root 用户可以使用 at 命令。

系统中默认只有 /etc/at.deny 文件,而且这个文件是空的,因此,系统中所有的用户都可以使用 at 命令。不过,如果我们打算控制用户的 at 命令权限,那么只需把用户写入 /etc/at.deny 文件即可

命令格式:

at设置任务:

at [选项] [时间]
[HH:MM]  [yyyy-mm-dd]
#设置具体任务后,按 ctrl+d 提交 。  #若设置具体任务时,想要退格重写,按ctrl+backspace进行退格。

at任务查询和删除:

 atq      //查看at任务列表
 atrm [工作号]  //删除指定的at任务

时间格式:

格式 用法
HH:MM 比如 04:00 AM。如果时间已过,则它会在第二天的同一时间执行。
Midnight(midnight) 代表 12:00 AM(也就是 00:00)。
Noon(noon) 代表 12:00 PM(相当于 12:00)。
Teatime(teatime) 代表 4:00 PM(相当于 16:00)。
英文月名 日期 年份 比如 January 15 2018 表示 2018 年 1 月 15 号,年份可有可无。
MMDDYY、MM/DD/YY、MM.DD.YY 比如 011518 表示 2018 年 1 月 15 号。
now+时间 以 minutes、hours、days 或 weeks 为单位,例如 now+5 days 表示命令在 5 天之后的此时此刻执行。
HH:MM 在今日的 HH:MM 进行,若该时刻已过,则明天此时执行任务
04:00            //表示在今天4点执行任务。若过了4点,那就是明天4点

HH:MM YYYY-MM-DD   规定在某年某月的某一天的特殊时刻进行该项任务
02:00 2020-09-20    //在2020年9月20日执行任务

HH:MM[am|pm] [Month] [Date]   //指定上午或者下午
06pm March 17                 //在3月17日下午6点执行
17:20 tomorrow                //明天的17点20分执行

HH:MM[am|pm] + number [minutes|hours|days|weeks]   //在某个时间点再加几个时间后才进行该项任务
now + 5 min                                  //现在的五分钟后执行
03pm + 2 days                                //在2天后的下午3点执行

示例:

Snipaste_2022-03-23_18-00-16.png

周期性任务设置crontab

crontab命令简介

  • 按照预先设置的时间周期(分钟、小时、天……)重复执行用户指定的命令操作。

  • 属于周期性计划任务。

  • 主要设置文件。

    • 全局配置文件,位于文件:/etc/crontab
    • 系统默认的设置,位于目录:/etc/cron.*/
    • 用户定义的设置,位于文件:/var/spool/cron/用户名

查看/etc/crontab文件:

Snipaste_2022-03-23_18-03-21.png

  • 命令格式:
 crontab -e [-u 用户名]      //编辑计划任务
 ​
 crontab -l [-u 用户名]      //查看计划任务
 ​
 crontab -r [-u 用户名]      //删除计划任务
 ​
 #-u选项缺省时默认针对当前用户,只有超级用户才可以使用-u

使用 “crontab -e” 进入 crontab 编辑界面。会打开vim编辑你的任务,输入格式为:

 * * * * * 需要执行的任务
   #即:时间周期设置 任务内容设置。
 #任务内容设置中,命令一定要用绝对路径,例如cp命令,要用/usr/bin/cp,可以用which查看命令的绝对路径

  • 任务配置格式
项目 含义 范围
第一个”*” 一小时当中的第几分钟(minute) 0~59
第二个”*” 一天当中的第几小时(hour) 0~23
第三个”*” 一个月当中的第几天(day) 1~31
第四个”*” 一年当中的第几个月(month) 1~12
第五个”*” 一周当中的星期几(week) 0~7(0和7都代表星期日)

在时间表示中,还有一些特殊符号需要学习

特殊符号 含义
*(星号) 代表任何时间。比如第一个”*”就代表一小时种每分钟都执行一次的意思。
,(逗号) 代表不连续的时间。比如”0 8,12,16***命令”就代表在每天的 8 点 0 分、12 点 0 分、16 点 0 分都执行一次命令。
-(中杠) 代表连续的时间范围。比如”0 5 ** 1-6命令”,代表在周一到周六的凌晨 5 点 0 分执行命令。
/(正斜线) 代表每隔多久执行一次。比如”/10***命令”,代表每隔 10 分钟就执行一次命令。

示例

• 0 17 * * 1-5

周一到周五每天17:00

 

• 30 8 * * 1,3,5

每周一、三、五的8点30分

 

• 0 8-18/2 * * *

8点到18点之间每2小时

 

• 0 * */3 * *

每3天

 

crontab -e [-u root]

 

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

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

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

 

2.每小时定时执行一次规则:

每小时执行: 0 * * * * 或者 0 * /1 * * *

每天.上午7点执行: 0 7 * * *

每天上午7点10分执行: 10 7 * * *

 

3.每天定时执行一次规则:

每天执行 0 0 * * *

 

4.每周定时执行一次规则:

每周执行 0 0 * *1

 

5.每月定时执行一次规则:

每月执行 0 0 1 * *

 

6.每年定时执行–次规则:

每年执行 0 0 1 1 *

 

其他例子

 

5 * * * * ls

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

 

30 5 * * * ls

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

 

30 7 8 * * ls

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

 

30 5 8 6 * ls

指定每年的6月8日5: 30执行ls命令

 

30 6 * * 0 ls

指定每星期日的6:30执行ls命令

[注: 0表示星期天,1表示星期1,以此类推,也可以用英文来表示,sun表示星期天,mon表示星期一等]

 

30 3 10,20 * * ls

每月10号及20号的3: 30执行ls命令

[注: “,”用来连接多个不连续的时段]

 

25 8-11 * * * ls

每天8-11点的第25分钟执行ls命令

[注: “-”用来连接连续的时段]

 

*/15 * * * * ls

每15分钟执行一次ls命令

[ 即每个小时的第 0 15 30 45 60分钟执行ls命令]

 

30 6 */10 * * ls

每个月中,每隔10天6:30执行一 次ls命令

[即每月的1、11、21、31日是的6: 30执行一次ls命令 ]

 

*/10 10-16 * 1,6 6 /usr/bin/ls -l

1,6月的每个周六从上午10点到下午的4点的每10分钟执行ls -l

总结

• 查看进程的命令(ps、 top、pgrep、 pstree)

• 进程控制

启动进程、调度进程、终止进程

• at命令 设置计划任务 (一次性任务)

• crontab计划任务的配置字段 (周期性任务)

今天的文章Linux进程与任务计划管理分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/13573.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注