Linux进程与任务计划管理(linux系统计划任务)

Linux进程与任务计划管理(linux系统计划任务)

程序和进程的关系

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

Linux进程与任务计划管理(linux系统计划任务)

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

Linux进程与任务计划管理(linux系统计划任务)

各列解释:

表头

含义

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: 使用完整的格式显示进程信息

Linux进程与任务计划管理(linux系统计划任务)Linux进程与任务计划管理(linux系统计划任务)

各列解释:

表头

含义

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. 第二部分从第六行开始,显示的是系统中进程的信息。

Linux进程与任务计划管理(linux系统计划任务)

进程动态行

Linux进程与任务计划管理(linux系统计划任务)

进程信息区

Linux进程与任务计划管理(linux系统计划任务)

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

Linux进程与任务计划管理(linux系统计划任务)

常用命令

Linux进程与任务计划管理(linux系统计划任务)

  • 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-0713 xfs-log/sda1790 xfs-log/md5877 systemd-logind885 abrt-watch-log886 abrt-watch-log890 rsyslogd[root@test ~]# pgrep -l -U hope#指定用户复制代码

Linux进程与任务计划管理(linux系统计划任务)

查看指定的进程:prtstat命令

格式:

prtstat [选项] [PID|USER]复制代码

常用选项

-r :格式显示(raw)

– 示例

[root@localhost ~]# prtstat 1Process: systemd State: S (sleeping) CPU#: 1 TTY: 0:0 Threads: 1Process, Group and Session IDs Process ID: 1 Parent ID: 0 Group ID: 1 Session ID: 1 T Group ID: -1Page Faults This Process (minor major): 23637 61 Child Processes (minor major): 445262 225CPU 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.00Memory 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): 0x7f4dd0af6923Scheduling Policy: normal Nice: 0 RT Priority: 0 (non RT)复制代码

Linux进程与任务计划管理(linux系统计划任务)

– 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复制代码

Linux进程与任务计划管理(linux系统计划任务)

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

格式:

pstree [选项] [ PID | USER ] 复制代码

常用选项

  • -a:显示启动每个进程对应的完整指令,包括启动进程的路径、参数等。
  • -p:显示PID。
  • -p < pid> : 显示指定进程及其子进程,同时显示每个进程的PID。
  • -u:显示进程的用户名称。
  • -u 用户名:显示指定用户的进程。
  • -H < pid>:高亮显示指定进程及其前辈进程。
  • -T:不显示线程thread,默认显示线程。

示例:

Linux进程与任务计划管理(linux系统计划任务)

列举被打开的文件:lsof

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

lsof [选项]复制代码

选项

功能

-c 字符串

只列出以字符串开头的进程打开的文件。

d 目录名

列出某个目录中所有被进程调用的文件。

-u 用户名

只列出某个用户的进程打开的文件。

-p pid

列出某个 PID 进程打开的文件。

示例:

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

Linux进程与任务计划管理(linux系统计划任务)Linux进程与任务计划管理(linux系统计划任务)

监控系统资源:vmstat

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

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

第一种方法

[root@localhost ~]# vmstat [-a] [刷新延时 刷新次数][root@localhost proc]# vmstat 1 3#使用vmstat检测,每隔1秒刷新一次,共刷新3次复制代码

Linux进程与任务计划管理(linux系统计划任务)Linux进程与任务计划管理(linux系统计划任务)

字段

含义

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 分区设备文件名

查看硬盘分区的读写情况。

Linux进程与任务计划管理(linux系统计划任务)

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

1、手工启动

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

"命令 &",把命令放入后台执行

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

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

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

前台运行:

Linux进程与任务计划管理(linux系统计划任务)Linux进程与任务计划管理(linux系统计划任务)

后台运行:

Linux进程与任务计划管理(linux系统计划任务)

调度启动

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

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

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

命令:

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

示例:

  1. &

[root@localhost etc]# sleep 60 &[1] 54364复制代码

Linux进程与任务计划管理(linux系统计划任务)

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

Linux进程与任务计划管理(linux系统计划任务)

  1. 处于后台的任务:jobs

jobs 【- l】复制代码

Linux进程与任务计划管理(linux系统计划任务)

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

fg 1复制代码

Linux进程与任务计划管理(linux系统计划任务)

  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/秒复制代码

Linux进程与任务计划管理(linux系统计划任务)

进程的优先级设置

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

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

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

PRI 和 NI 的关系如下:

PRI (最终值) = PRI (原始值) NI复制代码

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

Linux进程与任务计划管理(linux系统计划任务)

优先级范围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复制代码

Linux进程与任务计划管理(linux系统计划任务)

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

命令格式:

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

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

Linux进程与任务计划管理(linux系统计划任务)

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

Linux进程与任务计划管理(linux系统计划任务)Linux进程与任务计划管理(linux系统计划任务)

结束进程

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/秒复制代码

Linux进程与任务计划管理(linux系统计划任务)

2.kill、killall命令

Linux进程与任务计划管理(linux系统计划任务)

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 命令的默认信号。

示例:

Linux进程与任务计划管理(linux系统计划任务)

2.2killall

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

killall [选项] [信号] 进程名复制代码

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

Linux进程与任务计划管理(linux系统计划任务)

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点执行复制代码

示例:

Linux进程与任务计划管理(linux系统计划任务)

周期性任务设置crontab

crontab命令简介

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

查看/etc/crontab文件:

Linux进程与任务计划管理(linux系统计划任务)

  • 命令格式:

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计划任务的配置字段 (周期性任务)

作者:MrHOPE
链接:https://juejin.cn/post/7078235831567122462

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

(0)
上一篇 2022年7月6日 上午9:44
下一篇 2022年7月6日 上午9:58

相关推荐