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’
# 由于不和终端关联,默认将输出到文件