AI智能
改变未来

『学了就忘』Linux系统管理 — 85、工作管理相关命令

[toc]

1、工作管理简介

简单的说,工作管理就是管理前台的任务和后台的任务。

后台管理有几个重要事项需要注意:

  1. 前台是指当前可以操控和执行命令的这个操作环境,后台是指工作可以自行运行,但是不能直接用
    ctrl+c

    来终止它,只能使用

    fg/bg

    来调用工作。

  2. 当前的登录终端,只能管理当前终端的工作,而不能管理其他登录终端的工作。如
    tty1

    登录的终端,是不能管理

    tty2

    终端中的工作的。也就是说哪一个终端放入后台运行的程序,只有这个终端能查看到,其他的终端是查看不到该程序的。该终端一关闭,由这个终端放入后台运行的程序也会终止。也可以关闭终端让其放入后台的程序不终止,在本文第4点。

  3. 放入后台的命令必须可以持续运行一段时间,这样我们才能扑捉和操作这个工作。如果把
    ls

    命令放入后台执行,它很快就会执行完成,我们很难操作它。

  4. 放入后台执行的命令不能和前台用户有交互或需要前台输入,否则放入后台只能暂停,而不能执行。比如
    vim

    命令放入后台只能暂停,而不能执行,因为

    vim

    需要前台输入信息。还有一个

    top

    命令也不能放入后台执行,而只能放入后台暂停,因为

    top

    命令需要和前台有交互。也就是说,不是所有的命令都是可以在后台执行的, 只有这个程序不需要用户介入才可以。比如说:打包压缩、程序安装等。(重点)

2、如何把命令放入后台

有两种方法,分别如下:

(1)方式一

使用

命令 &

,把命令放入后台。

执行第一种把命令放入后台的方法是在命令后面加入

空格&

,这种方法放入后台的命令,在后台是执行状态。

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

举个例子:

# 1.打包etc目录# 将tar命令放入后台执行,每个后台命令会分配一个工作号,# 命令既然可以执行,就会有进程产生,所以也会有进程号。[root@localhost ~]# tar -zcf etc.tar.gz /etc &# [工作号] 进程号# 工作号:放入后台的顺序。[1] 34567[root@localhost ~]# tar: 从成员名中删除开头的“/”tar: 从硬连接目标中删除开头的“/”# 不清楚为何出现这两行,不影响,可以忽略。# 2.查看后台进程# 使用jobs命令查看# 可以看到我们刚刚放入后台正在运行的命令。# 运行状态Running。[root@localhost ~]# jobs[1]+  Running                 tar -zcf etc.tar.gz /etc &# 3.放入后台的命令执行完成后,会给你提示。# 如果下面信息在终端上出现:# 证明后台这个任务已经完成了,当然命令如果有执行结果的话,也会显示到操作终端上。# [1]是这个命令的工作号,+号代表这个任务是最近一个被放入后台的工作。[1]+  Done                    tar -zcf etc.tar.gz /etc

这样的好处,虽然tar命令在执行,但是当前终端我还是可以进行其他命令操作的。

(2)方式二

第二种方法是在命令执行过程中按

ctrl+z

快捷键,命令在后台是暂停状态。

使用这种方法放入后台的命令,就算是不和前台有交互,能在后台执行的命令,也是暂停状态。换句话说就是把一个服务先暂停,在放入后台。

ctrl+z

快捷键就是暂停的快捷键。

示例:

# 还是上边打包etc目录# 1.执行打包etc目录命令,然后快速按下ctrl+z[root@localhost ~]# tar -zcf etc.tar.gz /etctar: 从成员名中删除开头的“/”tar: 从硬连接目标中删除开头的“/”^Z  # 执行的过程中,按下ctrl+z快捷键# 该tar命令被放入后台,工作号是1,状态是暂停。[1]+  Stopped                 tar -zcf etc.tar.gz /etc# 2.这个时候查看后台运行的进程# 可以看到该tar命令在后台是停止的状态,工作号是1。[root@localhost ~]# jobs[1]+  Stopped                 tar -zcf etc.tar.gz /etc

通过

ps aux

命令也可以看到该进程。可以看他该进程的状态是

T

,停止状态。

如下图所示:

也就是说,执行这个命令的进程就会一直卡在这。

你可以强制把这个进程kill掉,也可以把该进程恢复到前台继续进行操作(下一点会说明)。

3、后台管理命令

(1)查看后台的工作

使用

jobs

命令,如下:

[root@localhost ~]# jobs -l选项:-l:显示工作的PID

示例:

[root@localhost ~]# jobs[1]-  Stopped                 tar -zcf etc.tar.gz /etc[2]+  Stopped                 top# 代-l选项查看[root@localhost ~]# jobs -l[1]-  6853 停止                  tar -zcf etc.tar.gz /etc[2]+  6855 停止 (tty 输出)     top[root@Lyl ~]#

(2)将后台暂停的工作恢复到前台执行

使用

fg

命令,如下:

[root@localhost ~]# fg %工作号参数:%工作号:%号可以省略,但是注意工作号和PID的区别

示例:

# 执行下面命令,会直接跳转到top命令的交互界面[root@localhost ~]# fg %2

(3)把后台暂停的工作恢复到后台执行

使用

bg

命令,如下:

[root@localhost ~]# bg %工作号

示例:

# 查看后台工作,可以看到tar命令是在后台停止状态[root@localhost ~]# jobs -l[1]+  6853 停止                  tar -zcf etc.tar.gz /etc# 把后台暂停的工作恢复到后台执行[root@localhost ~]# bg %1[1]+ tar -zcf etc.tar.gz /etc &# 查看后台工作,可以看到tar命令的状态是完成,# 等一小下,在执行jobs查看后台工作,就会没有任何显示了。# 证明后台停止的tar命令,已经在后台执行完成了。[root@localhost ~]# jobs -l[1]+  6853 Done                    tar -zcf etc.tar.gz /etc

提示你也可以直接把终端关闭掉,这些通过该终端被放入后台的工作,也会消失。当然这不是正确关闭后台工作的方式。还是应该正确终止后台工作之后,再关闭终端。

4、后台命令脱离登录终端运行

我们已经知道把命令放入后台,只能在当前登录终端执行。

那如果我是远程管理的服务器,在远程终端中执行了后台命令,这时我退出登录,这个后台命令就不能继续执行了,这个后台命令会被终止。

但是我们确实需要在远程终端中执行某些后台命令,使这些命令在关闭终端的时候,也能够继续执行。

该如何执行呢?

  • 第一种方法是把需要后台执行的命令加入
    /etc/rc.local

    文件,让系统在启动时执行这个后台程序。这种方法的问题是,服务器时不能随便重启的,万一有临时后台任务,服务器不能重启,就不能执行。

  • 第二种方法是使用系统定时任务,让系统在指定的时间执行某个后台命令。这样放入后台的命令与终端无关,是不依赖登录终端的。
  • 第三种方法是使用
    nohup

    命令

    nohup

    命令的作用就是让后台工作在离开操作终端时,也能够正确的在后台执行。命令的格式如下:

    [root@localhost ~]# nohup [命令] &例如:# 用find命令,打助/下所有文件,放入后台执行。[root@localhost ~]# nohup find / -print > /root/file.log &[3] 23496[root@localhost ~]# nohup:忽略输入并把输出追加到"nohup.out"

常见的还是用第三种方式处理。

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » 『学了就忘』Linux系统管理 — 85、工作管理相关命令