|NO.Z.00014|——————————|ManageMent|——|Linux&进程管理.V04|
一、进程管理
### --- 工作管理简介
### --- 后台管理有几个事项需要大家注意:
~~~ 前台是指#当前可以操控和执行命令的这个操作环境,后台是指工作可以自行运行,
~~~ 但是不能直接用 ctrl+c 来终止它,只能使用 fg/bg 来调用工作;
~~~ #当前的登录终端,只能管理当前终端的工作,而不能管理其他登录终端的工作。
~~~ 如 tty1 登录的终端是不能管理 tty2 终端中的工作的;
~~~ 放入后台的命令必须可以持续运行一段时间,这样我们才能扑捉和操作这个工作。
~~~ 如果把 ls命令放入后台执行,它很快就会执行完成,我们很难操作它。
~~~ 放入后台执行的命令不能和前台用户有交互或需要前台输入,否则放入后台只能暂停,
~~~ 而不能执行。比如 vi 命令放入后台只能暂停,而不能执行,因为 vi 需要前台输入信息。
~~~ top 命令也不能放入后台执行,而只能放入后台暂停,因为 top 命令需要和前台有交互。
~~~ #只有不需要用户接入的程序才可以放在后台运行。
### --- 如何把命令放入后
### --- 那么我们如何把命令放入后台呢?有两种方法,分别如下:
### --- 第一种方法是“命令 &”,把命令放入后台执行
~~~ 第一种把命令放入后台的方法是在命令后面加入“空格&”,这种方法放入后台的命令,
~~~ 在后台是执行状态。但是注意,放入后台执行的命令不能与前台有交互,
~~~ 否则这个命令是不能在后台执的。
二、举个例子:
### --- 进程管理
~~~ [工作号] 进程号
~~~ find 命令放入后台执行,每个后台命令会分配一个工作号,命令既然可以执行,
~~~ 就会有进程产生,所以也会有进程号。
~~~ 这样的话,虽然 find 命令在执行,但是当前终端我还是可以进行其他命令操作的。
~~~ 如果在终端上出现:证明后台这个任务已经完成了,当然命令如果有执行结果的话,也会显示到操作终端上。
~~~ [1]是这个命令的工作号,+号代表这个任务是最近一个被放入后台的工作。
[root@localhost ~]# find / -name install.log &
[1] 1920
[1]+ Done find / -name install.log
### --- 第二种方法是在命令执行过程中按 ctrl+z 快捷键,命令在后台是暂停状态
~~~ 使用这种方法放入后台的命令,就算是不和前台有交互,能在后台执行的命令,也是暂停状态,
~~~ ctrl+z 快捷键就是暂停的快捷键。举几个例子:
### --- 例 1:
~~~ 提示命令被放入后台,工作号是 1,状态是暂停。而且虽然 top 命令没有结束,
~~~ 也能取得控制台权限。
[root@localhost ~]# top
~~~ 在 top 命令执行的过程中,按下 ctrl+z 快捷键
[1]+ Stopped top
### --- 例 2:
~~~ 压缩一下/etc/目录
~~~ tar: 从成员名中删除开头的“/”
~~~ tar: 从硬连接目标中删除开头的“/”
~~~ 命令被放入后台,工作号是 2,状态是暂停。
[root@localhost ~]# tar -zcf etc.tar.gz /etc
^Z // 执行的过程中,按下 ctrl+z 快捷键
[2]+ Stopped tar -zcf etc.tar.gz /etc
### --- 示例1
~~~ 第一种:把执行命令放在后台
[root@server11 ~]# tar -zcf etc.tar.gz /etc/ &
[3] 16315
[root@server11 ~]# tar: Removing leading `/' from member names
[root@server11 ~]# jobs
[1]+ Running tar -zcf etc.tar.gz /etc/ // 状态是运行的;执行问后会显示Done停止状态。
~~~ 第二种:把执行程序放在后台运行,但是状态是停止的
~~~ 需要停止通过杀死进程干掉,或者通过手动命令恢复。
[root@server11 ~]# tar -zcf etc.tar.gz /etc/ // ctrl+z放在后台
[root@server11 ~]# jobs
[1]+ Stopped tar -zcf etc.tar.gz /etc/ // 状态是停止的
[root@server11 ~]# ps -aux
root 16394 0.6 0.0 123544 1332 pts/1 T 23:00 0:00 tar -zcf etc.tar.gz /etc/
### --- 示例2
~~~ vim不管是你用&还是ctrl+z都是暂停状态
[root@server11 ~]# top &
[root@server11 ~]# jobs
[1]+ Stopped top
[root@server11 ~]# top // ctrl+z放在后台
[root@server11 ~]# jobs
[5]+ Stopped top
~~~ vim放在后台都是停止状态
[root@server11 ~]# vim yanqi &
[root@server11 ~]# jobs
[6]+ Stopped vim yanqi
[root@server11 ~]# vim yanqi
[root@server11 ~]# jobs // ctrl+z放在后台
[6]- Stopped vim yanqi // 第一个数字是后台的工作号
[7]+ Stopped vim yanqi
一、后台命令管理:查看后台的工作
### --- 查看后台的工作
~~~ 选项:
~~~ -l:显示工作的 PID
~~~ 查看放在后台程序的进程号
[root@localhost ~]# jobs [-l]
[root@server11 ~]# jobs -l
[3] 16394 Stopped tar -zcf etc.tar.gz /etc/
[4] 16596 Stopped (signal) top
[5] 16621 Stopped (signal) top
[6]- 16679 Stopped (tty output) vim yanqi
[7]+ 16696 Stopped vim yanqi
二、将后台暂停的工作恢复到前台执行
### --- 将后台暂停的工作恢复到前台执行
~~~ 参数:
~~~ %工作号:
~~~ %号可以省略,但是注意工作号和 PID 的区别
[root@localhost ~]# fg %工作号
#fg %+(工作号)
[root@server11 ~]# jobs -l
[3] 16394 Stopped tar -zcf etc.tar.gz /etc/
[root@server11 ~]# fg %3
tar -zcf etc.tar.gz /etc/
[root@server11 ~]# jobs -l
[5] 16621 Stopped (signal) top
[root@server11 ~]# // 从后台放在前置执行的命令,所以没有输出
top - 23:14:33 up 7:03, 2 users, load average: 0.00, 0.01, 0.05
Tasks: 127 total, 2 running, 122 sleeping, 3 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.2 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1865308 total, 904436 free, 206812 used, 754060 buff/cache
KiB Swap: 4194300 total, 4194300 free, 0 used. 1418712 avail Mem
三、把后台暂停的工作恢复到后台执行
### --- 把后台暂停的工作恢复到后台执行
[root@localhost ~]# bg %工作号 // 与前台交互命令是没有办法进行后台执行的执行的
[root@server11 ~]# tar -zcf etc.tar.gz /etc/ // ctrl+z放在后台运行
[root@server11 ~]# jobs -l
[8]+ 17051 Stopped tar -zcf etc.tar.gz /etc/
[root@server11 ~]# bg %8 // 放在后台执行
[8]+ tar -zcf etc.tar.gz /etc/ &
[root@server11 ~]# jobs -l // 已经查看不到后台执行的程序了
四、后台命令脱离登录终端运行
### --- 后台命令脱离登录终端运行
~~~ 我们已经知道把命令放入后台,只能在当前登录终端执行。
~~~ 那如果我是远程管理的服务器,在远程终端中执行了后台命令,这时我退出登录,
~~~ 这个后台命令还能继续执行吗?当然是不行的,这个后台命令会被终止。
~~~ 但是我们确实需要在远程终端中执行某些后台命令,该如何执行呢?
~~~ #第一种方法是把需要后台执行的命令加入/etc/rc.local 文件,
~~~ 让系统在启动时执行这个后台程序。
~~~ 这种方法的问题是,服务器时不能随便重启的,万一有临时后台任务,就不能执行。
~~~ #第二种方法是使用系统定时任务,让系统在指定的时间执行某个后台命令。
~~~ 这样放入后台的命令与终端无关,是不依赖登录终端的。
~~~ 最后一种方法是使用 nohup 命令。
### --- nohup 命令的作用就是让后台工作在离开操作终端时,也能够正确的在后台执行。
### --- n命令的格式如下:
[root@localhost ~]# nohup [命令] &
~~~ 例如:
[root@localhost ~]# nohup find / -print > /root/file.log &
[3] 2349 // 用 find 命令,打印/下所有文件。放入后台执行
[root@localhost ~]# nohup: 忽略输入并把输出追加到"nohup.out"
~~~ 有提示信息
### --- n示例
[root@server11 ~]# nohup find / -print > /root/file.log &
[8] 17443
[root@server11 ~]# nohup: ignoring input and redirecting stderr to stdout
[root@server11 ~]# jobs -l
[1] 17443 Done nohup find / -print > /root/file.log
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
——W.S.Landor
分类:
cdv006-system
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」