linux 基础(9)背景工作管理

前景和背景工作管理

在 linux 中,进程以调用顺序构成一棵树,系统的初始程序是 systemd,然后一个程序又调用另一个程序。当你在 bash 里输入其他指令,这些指令就作为当前shell 的子进程被创建执行,执行完退出又回到 bash。

bash 默认是阻塞执行命令的,也就是执行结束后才能执行下一条指令。正在执行的这个指令就是前景。当我们要同时做多件事,除了多开控制台,也可以将程序移动到后台执行,此时前台还可以进行其他操作。

创建背景工作

在一个命令后加上&就可以让他成为背景命令,此时他将在后台执行。

tar -zpcf /tmp/etc.tar.gz /etc &
[2] 2829 # 分别是job ID 和 PID
[2]-  Done

此时命令在背景中执行,可以继续操作,执行完成后会提醒。

如果命令有输出和错误流,仍然会输出到控制台,干扰操作,应该使用流重定向。

将前台工作暂停

以正常方式打开一个程序后,如果想要暂停他,就按下Ctrl + Z输入暂停信号,此时程序会暂停并且移到后台,回到 shell 继续操作。

python3
Python 3.8.10 (default, Nov 14 2022, 12:59:47) 
[GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 
[2]+  Stopped                 python3

jobs 可以查看当前的任务

jobs -l # l 展现更详细信息
[1]-  2863 Stopped                 python3
[2]+  2864 Stopped                 python3
  • 号表示最后进入列表的后台任务,- 表示第二后进入列表的,除此之外还有任务的 job ID 和 PID,当前状态(Stopped 或 Running)和执行的指令。

切换前后台

fg可以把后台程序拿回前台处理。bg可以把后台的 Stopped 工作切换成 Running。

fg # 取出最近的工作
fg %2 # 取出2号工作到前台执行

bg %3 # 执行后台的工作

使用 nohup 放置到系统背景

使用 bash 创建的前台或者后台程序,都是 shell 的子进程,和 shell 本身相关,当退出shell后这些任务也就不存在了。如果需要退出后指令继续工作,就需要放到系统背景里工作,nohup [指令] &可以将指令放到系统背景执行。

nohup sleep 3s &
# 继续工作
nohup: ignoring input and appending output to ‘nohup.out’
# 由于不和终端关联,默认将输出到文件
posted @ 2023-02-14 16:36  Ofnoname  阅读(89)  评论(0编辑  收藏  举报