进程和计划任务

 目录

一、程序、进程、线程
        1.1程序(Program)
        1.2进程(Process)
        1.3线程(Thread)
        1.4区别总结
        1.5关系
        1.6例子
二、查看进程 
        2.1查看进程中的线程
        2.2ps命令
        2.3 top命令
        2.4pgrep命令
        2.5pstree
        2.6jobs、bg、fg命令
三、杀死进程 (kill、pkill、killall)
        3.1kill 命令
        3.2pkill 命令
        3.3killall 命令
        3.4区别总结
        3.5选择依据
四、计划任务
        4.1at 命令
        4.2crontab 命令
        4.3总结


一、程序、进程、线程

        程序、进程和线程是计算机科学中的三个基本概念,理解它们的含义以及它们之间的区别对于理解操作系统和应用程序的运行非常重要。

1.1程序(Program)

  • 定义:程序是一个存储在磁盘上的静态代码文件,包含一组指令,用于执行特定任务。它是一个被存储在磁盘上的可执行文件。

  • 特点:程序本身不具有任何动态行为,只是一个静态的实体,例如 .exe 文件、脚本文件等。

1.2进程(Process)

  • 定义:进程是程序的一次执行实例,它是操作系统分配资源和调度的基本单位。一个程序可以对应多个进程,例如同一个程序可以被多次启动,产生多个进程。

  • 特点

    • 动态:进程是程序的动态执行状态,包含了程序代码、数据、堆栈、寄存器、程序计数器等。

    • 资源:进程拥有自己的地址空间和系统资源,如内存、文件描述符、网络连接等。

    • 隔离:进程之间是隔离的,一个进程无法直接访问另一个进程的地址空间。

1.3线程(Thread)

  • 定义:线程是进程中的一个执行单元,是CPU调度的基本单位。一个进程可以包含多个线程,这些线程共享进程的资源。

  • 特点

    • 轻量:线程比进程更轻量级,创建和销毁的开销较小。

    • 共享资源:同一进程内的线程共享进程的地址空间和资源,如全局变量、打开的文件等。

    • 独立执行:每个线程有自己的栈、寄存器和程序计数器,但与其他线程共享进程的其他资源。

1.4区别总结

  • 创建与销毁

    • 程序:存储在磁盘上的静态文件,不涉及创建与销毁。

    • 进程:操作系统分配资源、创建、销毁的单位,开销较大。

    • 线程:进程内的执行单元,创建和销毁开销较小。

  • 资源和隔离

    • 程序:无动态资源分配。

    • 进程:独立的资源和地址空间,相互隔离。

    • 线程:共享进程的资源和地址空间,互相协作。

  • 执行与调度

    • 程序:不涉及执行,仅作为静态实体存在。

    • 进程:操作系统调度的基本单位,具有独立的执行上下文。

    • 线程:CPU调度的基本单位,独立执行但共享资源。

1.5关系

  • 程序是静态的代码文件,进程是程序的动态运行实例,线程是进程中的执行单元。一个程序可以启动多个进程,一个进程可以包含多个线程。

1.6例子

假设一个文字处理程序(如Microsoft Word):

  • 程序:磁盘上的Word可执行文件。

  • 进程:当你打开多个Word文档时,每个文档对应一个进程,每个进程有独立的内存空间。

  • 线程:在一个Word进程中,同时进行的拼写检查、自动保存、用户输入处理等,每个任务可以由不同的线程执行,这些线程共享进程的内存和资源。

二、查看进程 

2.1查看进程中的线程

[root@localhost ~]# grep -i threads /proc/39217/status
Threads:	1
[root@localhost ~]# prtstat 39217
Process: httpd         		State: S (sleeping)
  CPU#:  1  		TTY: 0:0	Threads: 1
Process, Group and Session IDs
  Process ID: 39217		  Parent ID: 1
    Group ID: 39217		 Session ID: 39217
  T Group ID: -1

Page Faults
  This Process    (minor major):     2347         3
  Child Processes (minor major):        0         0
CPU Times
  This Process    (user system guest blkio):   0.14   2.40   0.00   0.00
  Child processes (user system guest):         0.00   0.00   0.00
Memory
  Vsize:       229 MB    
  RSS:         5136 kB    		 RSS Limit: 18446744073709 MB
  Code Start:  0x555c8f242000		 Code Stop:  0x555c8f2bb414
  Stack Start: 0x7ffd3ea1e2a0
  Stack Pointer (ESP): 0x7ffd3ea1def8	 Inst Pointer (EIP): 0x7fa0ea9bab23
Scheduling
  Policy: normal
  Nice:   0 		 RT Priority: 0 (non RT)

2.2ps命令

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

ps 命令用于显示系统中进程的静态快照。以下是常用参数和选项的详细介绍:

2.2.1常用的参数

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

  • -u:使用以用户为主的格式输出进程信息。

  • -x:显示当前用户在所有终端下的进程信息。

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

  • -1:使用长格式显示进程信息。

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

2.2.2常用的选项组合

ps -aux

此命令将以简单列表的形式显示出进程信息。第一行为列表标题,其中各字段的含义描述如下。

2.2.3输出信息字段含义

  • USER:启动该进程的用户账号的名称。

  • PID:该进程在系统中的数字 ID 号,在当前系统中是唯一的。

  • %CPU:CPU 占用的百分比。

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

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

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

  • TTY:表明该进程在哪个终端上运行。不是从终端启动的进程则显示为 ?

    • pts:远程登录终端。

    • tty1-tty6:字符界面终端。

    • ?:系统本身执行的进程。

  • STAT:该进程的状态:

    • D:不可中断的休眠状态。

    • R:正在运行状态。

    • S:处于休眠状态,可被唤醒。

    • T:停止状态,可能是在后台暂停或进程处于跟踪调试状态。

    • Z:僵尸进程,进程已经中止,但是部分程序还在内存中。

其他状态标识

  • <:表示进程运行在高优先级上。

  • N:表示进程运行在低优先级上。

  • L:表示进程有页面锁定在内存中。

  • s:表示进程是控制进程。

  • l:表示进程是多线程的。

  • +:表示当前进程运行在前台。

2.2.4其他字段

  • START:启动该进程的时间。

  • TIME:该进程占用的 CPU 时间。

  • COMMAND:启动该进程的命令的名称。

2.2.5例子1

ps -aux

输出示例及解释

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1  17000  1288 ?        Ss   09:01   0:01 /sbin/init
user      1234  0.5  1.2 123456 98765 pts/0    R+   09:10   0:10 /usr/bin/python3 script.py
  • USERroot 启动了 PID 为 1 的进程。

  • PID:进程 ID。

  • %CPU:CPU 使用率。

  • %MEM:内存使用率。

  • VSZ:虚拟内存量。

  • RSS:物理内存量。

  • TTY:进程运行的终端。

  • STAT:进程状态(SsR+)。

  • START:进程启动时间。

  • TIME:进程占用的 CPU 时间。

  • COMMAND:启动该进程的命令。

通过理解这些字段和选项,可以更有效地监控和管理系统中的进程。

 2.2.6例子2

[root@benet ~]# vim a.txt        #tty1(第一个终端)

[root@localhost ~]# ps -aux |grep vim        #(tty2)
root      14549  0.0  0.1 151228  5072 pts/0    S+   13:51   0:00 vim a.txt
root      14564  0.0  0.0 112660   964 pts/1    R+   13:52   0:00 grep --color=auto vim

ctrl+z                                        #tty1(第一个终端)
[1]+  Stopped                 vim a.txt

[root@localhost ~]# ps -aux |grep vim                #(tty2)
root      14549  0.0  0.1 151228  5072 pts/0    T    13:51   0:00 vim a.txt
root      14579  0.0  0.0 112660   964 pts/1    R+   13:53   0:00 grep --color=auto vim

注:
ctrl-c 是发送 SIGINT 信号,终止一个进程
ctrl-z 是发送 SIGSTOP 信号,挂起一个进程。将作业放置到后台(暂停)
ctrl-d 不是发送信号,而是表示一个特殊的二进制值,表示 EOF。代表输入完成或者注销

2.2.7常用的选项组合

ps -elf        #将以长格式显示系统中的进程信息

[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 - 48425 ep_pol Jun26 ?        00:00:03 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
1 S root          2      0  0  80   0 -     0 kthrea Jun26 ?        00:00:00 [kthreadd]
1 S root          3      2  0  80   0 -     0 smpboo Jun26 ?        00:00:00 [ksoftirqd/0]
1 S root          5      2  0  60 -20 -     0 worker Jun26 ?        00:00:00 [kworker/0:0H]
1 S root          7      2  0 -40   - -     0 smpboo Jun26 ?        00:00:00 [migration/0]
1 S root          8      2  0  80   0 -     0 rcu_gp Jun26 ?        00:00:00 [rcu_bh]
1 S root          9      2  0  80   0 -     0 rcu_gp Jun26 ?        00:00:01 [rcu_sched]
5 S root         10      2  0 -40   - -     0 smpboo Jun26 ?        00:00:00 [watchdog/0]
5 S root         11      2  0 -40   - -     0 smpboo Jun26 ?        00:00:00 [watchdog/1]
1 S root         12      2  0 -40   - -     0 smpboo Jun26 ?        00:00:00 [migration/1]
1 S root         13      2  0  80   0 -     0 smpboo Jun26 ?        00:00:00 [ksoftirqd/1]
1 S root         15      2  0  60 -20 -     0 worker Jun26 ?        00:00:00 [kworker/1:0H]
5 S root         17      2  0  80   0 -     0 devtmp Jun26 ?        00:00:00 [kdevtmpfs]
1 S root         18      2  0  60 -20 -     0 rescue Jun26 ?        00:00:00 [netns]
1 S root         19      2  0  80   0 -     0 watchd Jun26 ?        00:00:00 [khungtaskd]
1 S root         20      2  0  60 -20 -     0 rescue Jun26 ?        00:00:00 [writeback]
1 S root         21      2  0  60 -20 -     0 rescue Jun26 ?        00:00:00 [kintegrityd]
1 S root         22      2  0  60 -20 -     0 rescue Jun26 ?        00:00:00 [bioset]
1 S root         23      2  0  60 -20 -     0 rescue Jun26 ?        00:00:00 [kblockd]
1 S root         24      2  0  60 -20 -     0 rescue Jun26 ?        00:00:00 [md]
1 S root         30      2  0  80   0 -     0 kswapd Jun26 ?        00:00:02 [kswapd0]
1 S root         31      2  0  85   5 -     0 ksm_sc Jun26 ?        00:00:00 [ksmd]
1 S root         32      2  0  99  19 -     0 khugep Jun26 ?        00:00:00 [khugepaged]
1 S root         33      2  0  60 -20 -     0 rescue Jun26 ?        00:00:00 [crypto]
1 S root         41      2  0  60 -20 -     0 rescue Jun26 ?        00:00:00 [kthrotld]
1 S root         43      2  0  60 -20 -     0 rescue Jun26 ?        00:00:00 [kmpath_rdacd]
1 S root         44      2  0  60 -20 -     0 rescue Jun26 ?        00:00:00 [kpsmoused]
1 S root         46      2  0  60 -20 -     0 rescue Jun26 ?        00:00:00 

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

2.2.8僵尸进程:

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

2.3 top命令

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

top 命令是 Linux 系统中用于实时显示系统中各个进程的资源使用情况的命令。以下是对 top 命令的详解,包括其输出字段、常用交互命令和选项。

2.3.1top 命令的基本使用

在终端中输入 top 并回车,即可启动 top 命令.

2.3.2top命令的输出字段

在启动 top 命令后,会显示如下信息:

①第一行:系统时间和运行时间

top - 09:01:12 up 10 days,  2:13,  1 user,  load average: 0.25, 0.15, 0.05
  • 09:01:12:当前系统时间。

  • up 10 days, 2:13:系统已经运行的时间。

  • 1 user:当前登录的用户数量。

  • load average:系统的负载平均值,分别为 1 分钟、5 分钟和 15 分钟的平均负载。

②第二行:进程总览

Tasks: 123 total, 2 running, 121 sleeping, 0 stopped, 0 zombie
  • 123 total:总进程数。

  • 2 running:正在运行的进程数。

  • 121 sleeping:处于睡眠状态的进程数。

  • 0 stopped:停止的进程数。

  • 0 zombie:僵尸进程数。

③第三行:CPU 使用情况

%Cpu(s): 1.2 us, 0.5 sy, 0.0 ni, 98.2 id, 0.0 wa, 0.0 hi, 0.1 si, 0.0 st
  • us:用户空间占用 CPU 的百分比。

  • sy:内核空间占用 CPU 的百分比。

  • ni:改变过优先级的进程占用 CPU 的百分比。

  • id:空闲 CPU 的百分比。

  • wa:等待 I/O 的 CPU 时间百分比。

  • hi:硬件中断占用的 CPU 时间百分比。

  • si:软件中断占用的 CPU 时间百分比。

  • st:虚拟机占用的 CPU 时间百分比。

④第四行:内存使用情况

KiB Mem :  16365284 total,  1234568 free,  5678904 used,  1234568 buff/cache
  • total:总内存。

  • free:空闲内存。

  • used:已使用的内存。

  • buff/cache:用于缓冲和缓存的内存。

⑤第五行:交换内存使用情况

KiB Swap:  2097148 total,  2097148 free,        0 used.  5678904 avail Mem
  • total:总交换空间。

  • free:空闲交换空间。

  • used:已使用的交换空间。

  • avail Mem:可用的物理内存。

⑥进程列表

PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
  • PID:进程 ID。

  • USER:进程所有者。

  • PR:进程优先级。

  • NI:进程的 Nice 值。

  • VIRT:进程使用的虚拟内存总量。

  • RES:进程使用的物理内存量。

  • SHR:进程使用的共享内存量。

  • S:进程状态(R 运行,S 睡眠,D 不可中断睡眠,T 停止,Z 僵尸)。

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

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

  • TIME+:进程使用的总 CPU 时间。

  • COMMAND:进程启动的命令名称。

2.3.3常用交互命令

top 运行过程中,可以使用以下键来与 top 进行交互:

  • h:显示帮助。

  • k:杀死一个进程。输入进程 ID 和信号。

  • q:退出 top

  • r:改变一个进程的优先级(renice)。

  • u:按用户筛选进程。

  • P:按 CPU 使用率排序。

  • M:按内存使用率排序。

  • T:按运行时间排序。

  • c:切换显示完整命令行。

  • 1:显示每个 CPU 的使用情况。

2.3.4常用选项

可以在启动 top 命令时使用一些选项来定制输出:

  • -d:指定刷新间隔时间,例如 top -d 5 表示每 5 秒刷新一次。

  • -p:指定只监视特定的进程,例如 top -p 1234

  • -u:指定只显示特定用户的进程,例如 top -u username

2.3.5例子

top -d 5 -u root

此命令每 5 秒刷新一次,只显示 root 用户的进程。

通过掌握 top 命令的输出字段和交互命令,可以更有效地监控和管理系统中的进程和资源使用情况。

2.3.6top 命令显示的 7 行进程信息详解

  1. PID(进程 ID)

    • 进程的唯一标识符。

  2. USER(进程所有者的用户名)

    • 启动该进程的用户账号的名称。

  3. PR(优先级)

    • 进程的优先级,由内核动态调整,用户不能直接修改。

  4. NI(Nice 值)

    • 进程的优先级值,负值表示高优先级,正值表示低优先级,用户可以自己调整。

  5. VIRT(virtual memory usage)

    • 虚拟内存,是进程正在使用的所有内存(在 ps 命令中标为 VSZ)。

      • 进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等。

      • 假如进程申请 100MB 的内存,但实际只使用了 10MB,那么它会增长 100MB,而不是实际的使用量。

  6. RES(resident memory usage)

    • 常驻内存,是进程实际使用的物理内存(在 ps 命令中标为 RSS)。

      • 进程当前使用的内存大小,但不包括 swap out。

      • 包含其他进程的共享内存。

      • 如果申请 100MB 的内存,实际使用 10MB,它只增长 10MB,与 VIRT 相反。

      • 统计加载的库文件所占内存大小。

  7. SHR(shared memory usage)

    • 共享内存大小,单位为 KB。

      • 包括自身进程的共享内存,也包括其他进程的共享内存。

      • 虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小。

      • 计算某个进程所占的物理内存大小公式:RES - SHR

      • swap out 后,共享内存将会降下来。

 2.4pgrep命令

pgrep 是一个用于根据模式匹配查找进程 ID 的命令。它允许你使用进程名或其他属性来查找进程,并返回匹配的进程 ID。以下是 pgrep 的详细参数和使用方法:

2.4.1常用参数

  • -d <string>:指定分隔符,默认是换行符。

  • -l:显示进程 ID 以及对应的进程名。

  • -a:显示进程 ID 以及对应的完整命令行。

  • -u <username>:匹配特定用户的进程。

  • -U <uid>:匹配特定用户 ID 的进程。

  • -g <group>:匹配特定进程组 ID 的进程。

  • -s <sid>:匹配特定会话 ID 的进程。

  • -t <tty>:匹配特定终端的进程。

  • -v:反向匹配。

  • -x:精确匹配进程名。

  • -f:匹配完整的命令行。

  • -c:显示匹配的进程数量。

  • -n:仅显示最近启动的一个进程的 PID。

  • -o:仅显示最早启动的一个进程的 PID。

2.4.2使用方法

查找进程 ID

最基本的用法是查找特定名称的进程 ID。例如,查找 httpd 进程的 PID:

pgrep httpd

2.4.3显示进程 ID 和进程名

使用 -l 参数可以显示进程 ID 以及对应的进程名:

pgrep -l httpd

2.4.4显示进程 ID 和完整命令行

使用 -a 参数可以显示进程 ID 以及对应的完整命令行:

pgrep -a httpd

2.4.5根据用户匹配

使用 -u 参数匹配特定用户的进程:

pgrep -u username httpd

例如,查找 root 用户的 httpd 进程:

pgrep -u root httpd

2.4.6反向匹配

使用 -v 参数进行反向匹配:

pgrep -v httpd

2.4.7精确匹配进程名

使用 -x 参数进行精确匹配进程名:

pgrep -x httpd

2.4.8匹配完整命令行

使用 -f 参数匹配完整的命令行:

pgrep -f '/usr/sbin/httpd -k start'

2.4.9显示匹配的进程数量

使用 -c 参数显示匹配的进程数量:

pgrep -c httpd

2.4.10显示最近启动的一个进程的 PID

使用 -n 参数仅显示最近启动的一个进程的 PID:

pgrep -n httpd

2.4.11显示最早启动的一个进程的 PID

使用 -o 参数仅显示最早启动的一个进程的 PID:

pgrep -o httpd

2.4.13查找并显示 nginx 进程的 PID 和命令行

pgrep -a nginx

2.4.14查找 root 用户启动的 sshd 进程

pgrep -u root sshd

2.4.15查找所有非 httpd 进程的 PID

pgrep -v httpd

 2.5pstree

pstree 命令用于以树状结构显示系统中的进程及其父子关系。它是一个非常有用的工具,可以帮助用户直观地了解进程的层次结构以及进程之间的关系。

2.5.1使用方法

基本用法

pstree

运行此命令将显示系统中所有进程的树状结构。

2.5.2常用参数

  • -p:显示进程 ID。

  • -u:显示进程所属的用户。

  • -a:显示进程的完整命令行。

  • -c:对同名进程不进行合并。

  • -n:按进程 ID 排序显示(默认按进程名排序)。

  • -h:高亮当前终端用户的进程。

  • -H <pid>:高亮指定进程 ID 的进程。

  • -s:显示进程的父进程树。

  • -l:显示长格式的进程树(不折行)。

  • -V:显示版本信息。

2.5.3示例及解释

显示进程树

pstree

这将显示系统中所有进程的树状结构。例如:

init─┬─cron
     ├─sshd───sshd───bash───pstree
     └─nginx───nginx

显示进程 ID

pstree -p

显示每个进程的 PID。例如:

init(1)─┬─cron(2534)
        ├─sshd(2546)─┬─sshd(2578)─┬─bash(2580)───pstree(2601)
        │            └─nginx(2590)

显示进程所属用户

pstree -u

显示每个进程所属的用户。例如:

init─┬─cron(root)
     ├─sshd(root)───sshd(user)───bash(user)───pstree(user)
     └─nginx(www-data)───nginx(www-data)

显示进程的完整命令行

pstree -a

显示每个进程的完整命令行。例如:

init
  ├─cron
  ├─sshd
  │   ├─sshd
  │   │   └─bash
  │   │       └─pstree -a
  └─nginx
      └─nginx

高亮当前终端用户的进程

pstree -h

高亮当前终端用户的进程,便于区分。例如:

init
  ├─cron
  ├─sshd
  │   ├─sshd
  │   │   └─bash
  │   │       └─pstree -h
  └─nginx
      └─nginx

高亮指定进程

pstree -H <pid>

高亮指定 PID 的进程。例如,高亮 PID 为 1234 的进程:

pstree -H 1234

显示长格式的进程树

pstree -l

显示长格式的进程树,不进行折行。例如:

init───sshd───bash───pstree -l

显示当前系统中的进程树及其 PID

pstree -p

显示当前系统中的进程树及其完整命令行

pstree -a

显示当前系统中的进程树,按 PID 排序

pstree -n

显示当前系统中的进程树,显示进程所属的用户

pstree -u

高亮当前终端用户的进程

pstree -h

 2.5.4常用组合

[root@localhost ~]# pstree -pua xiewei
bash,15500
  └─vim,15547 1.txt

 2.6jobs、bg、fg命令

2.6.1jobs 命令

jobs 命令用于显示当前终端会话中的作业列表及其状态。

2.6.2使用方法

jobs [options] [job_spec]

2.6.3常用选项

  • -l:显示作业的 PID。

  • -n:只列出自上次通知后状态发生变化的作业。

  • -p:只显示每个作业的进程 ID。

  • -r:只显示正在运行的作业。

  • -s:只显示停止的作业。

2.6.4示例

显示当前终端中的所有作业及其状态:

jobs

显示作业的 PID:

jobs -l

显示当前终端中正在运行的作业:

jobs -r

2.6.5fg 命令

fg 命令用于将后台中的作业移到前台运行。

2.6.6使用方法

fg [job_spec]

  • job_spec:指定要移到前台的作业。可以是 %n(作业编号)、%string(作业名称)等。

2.6.7示例

将最近的一个后台作业移到前台运行:

fg

将特定作业编号的作业移到前台运行,例如作业编号为 1:

fg %1

2.6.8bg 命令

bg 命令用于将暂停(停止)状态的作业恢复到后台运行。

2.6.9使用方法

bg [job_spec]

  • job_spec:指定要恢复到后台运行的作业。可以是 %n(作业编号)、%string(作业名称)等。

2.6.10示例

将最近的一个暂停的作业恢复到后台运行:

bg

将特定作业编号的作业恢复到后台运行,例如作业编号为 1:

bg %1

2.6.11综合示例

示例:管理作业

  1. 启动一个长时间运行的命令,例如:

    sleep 1000
  2. 在命令运行期间,按 Ctrl+Z 暂停作业。这时终端会显示类似以下信息:

    [1]+ Stopped sleep 1000
  3. 使用 jobs 命令查看当前暂停的作业:

    jobs

    输出:

    [1]+ Stopped sleep 1000
  4. 使用 bg 命令将暂停的作业恢复到后台继续运行:

    bg %1

    输出:

    [1]+ sleep 1000 &
  5. 使用 fg 命令将后台中的作业移到前台运行:

    fg %1
  6. 使用 jobs -l 命令查看作业的详细信息,包括 PID:

    jobs -l

    输出:

    [1]+ 12345 Stopped (signal) sleep 1000

2.6.12总结

  • jobs 命令:用于显示当前终端会话中的作业列表及其状态。

  • fg 命令:用于将后台中的作业移到前台运行。

  • bg 命令:用于将暂停(停止)状态的作业恢复到后台运行。

三、杀死进程 (kill、pkill、killall)

3.1kill 命令

kill 命令用于向一个或多个进程发送信号,通常用于终止进程。默认发送 SIGTERM 信号,请求进程优雅地终止。

3.1.1使用方法

kill [signal] <pid>

  • signal:要发送的信号,可以是信号的名称(如 SIGTERMSIGKILL)或信号的编号。

  • pid:进程 ID,可以是一个或多个进程 ID。

3.1.2示例

终止 PID 为 1234 的进程:

kill 1234

发送 SIGKILL 信号强制终止 PID 为 1234 的进程:

kill -9 1234

3.2pkill 命令

pkill 命令用于通过进程名来发送信号给进程。默认发送 SIGTERM 信号。

3.2.1使用方法

pkill [options] <pattern>

  • options:各种选项来细化进程匹配的条件。

  • pattern:进程名称的模式。

3.2.2常用选项
  • -u <username>:匹配特定用户的进程。

  • -f:匹配完整的命令行。

  • -9:发送 SIGKILL 信号。

  • -x:精确匹配进程名。

  • -l:显示被杀死的进程名。

  • -a:显示被杀死的进程的完整命令行。

3.3.3示例

终止所有名为 httpd 的进程:

pkill httpd

终止由 root 用户启动的 httpd 进程:

pkill -u root httpd

强制终止所有名为 httpd 的进程:

pkill -9 httpd

3.3killall 命令

killall 命令用于通过进程名发送信号给所有匹配的进程,默认发送 SIGTERM 信号。

3.3.1使用方法

killall [options] <name>

  • options:各种选项来细化进程匹配的条件。

  • name:进程名称。

3.3.2常用选项
  • -u <username>:匹配特定用户的进程。

  • -e:精确匹配进程名。

  • -I:忽略进程名的大小写。

  • -i:交互式,逐个询问是否终止进程。

  • -v:显示被杀死的进程。

  • -r <regex>:使用正则表达式匹配进程名。

  • -9:发送 SIGKILL 信号。

3.3.3示例

终止所有名为 httpd 的进程:

killall httpd

强制终止所有名为 httpd 的进程:

killall -9 httpd

终止由 root 用户启动的 httpd 进程:

killall -u root httpd

3.4区别总结

  • kill:通过进程 ID 发送信号,需要知道具体的进程 ID。

  • pkill:通过进程名发送信号,支持多种选项进行精确匹配,可匹配部分名称或命令行。

  • killall:通过进程名发送信号,默认会终止所有匹配的进程,支持精确匹配和正则表达式。

3.5选择依据

  • 使用 kill 当你知道确切的进程 ID 时。

  • 使用 pkill 当你要通过进程名或部分命令行匹配多个进程时。

  • 使用 killall 当你要通过进程名匹配所有同名进程时。

 四、计划任务

4.1at 命令

at 命令用于在将来的特定时间安排一次性任务。使用 at 可以在指定的时间点执行某个命令或脚本。

4.1.1使用方法

  1. 启动 at 命令

    at [time]
    time:指定任务执行的时间。例如,可以使用 now + 1 minute3pm2:30am 等。
  2. 输入命令: 在 at 提示符下,输入要执行的命令,输入完成后按 Ctrl + D 结束输入。例如:

    at 3pm
    at> echo "Hello World" > /tmp/hello.txt
    at> <Ctrl + D>
  3. 查看已安排的任务

    atq
  4. 删除已安排的任务

    atrm [job_number]
    • job_number:使用 atq 命令列出的任务编号。

4.1.2示例

安排任务在下午 3 点执行:

at 3pm
at> echo "Task executed at 3pm" > /tmp/task.log
at> <Ctrl + D>

查看已安排的任务:

atq

删除任务编号为 2 的任务:

crontab -e

4.2crontab 命令

crontab 命令用于管理定时任务表。它允许用户安排周期性执行的任务,例如每天、每周或每月。crontab 是 "cron table" 的缩写,其中 "cron" 来源于希腊语中的 "χρόνος" (chronos),意思是时间。

4.2.1使用方法

  1. 编辑用户的 crontab 文件

    crontab -e
  2. 查看用户的 crontab 文件

    crontab -l
  3. 删除用户的 crontab 文件

    crontab -r
  4. 为特定用户管理 crontab 文件(需要管理员权限)

    crontab -u [username] -e

4.2.2crontab 文件格式

每一行定义一个任务,由 5 个时间字段和一个命令字段组成:

* * * * * command_to_be_executed
- - - - -
| | | | |
| | | | +---- Day of the week (0 - 7) (Sunday is 0 and 7)
| | | +------ Month (1 - 12)
| | +-------- Day of the month (1 - 31)
| +---------- Hour (0 - 23)
+------------ Minute (0 - 59)

4.2.3时间字段示例

  • * * * * *:每分钟执行

  • 0 0 * * *:每天午夜执行

  • 0 6 * * 1:每周一早上 6 点执行

  • 0 0 1 * *:每月 1 号午夜执行

  • 0 0 1 1 *:每年 1 月 1 号午夜执行

4.2.4示例

编辑当前用户的 crontab 文件,添加以下行以每天早上 7 点执行备份脚本:

crontab -e

在编辑器中添加:

0 7 * * * /home/user/backup.sh

查看当前用户的 crontab 文件:

crontab -l

删除当前用户的 crontab 文件:

crontab -r

为用户 john 管理 crontab 文件(需要管理员权限):

sudo crontab -u john -e

4.3总结

  • at 命令:用于安排一次性任务在将来的特定时间执行。

  • crontab 命令:用于管理定时任务表,安排周期性任务。通过编辑 crontab 文件,可以在特定的时间和日期周期性地执行任务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值