3.3 KiB
3.3 KiB
Linux 下 bg / fg 的典型用法
-
启动一个长时间运行的前台进程
$ tar czf huge.tgz /very/big/dir # 终端被占用 -
挂起(Suspend)该进程
按下Ctrl-Z[1]+ Stopped tar czf huge.tgz /very/big/dir -
查看当前 shell 的作业列表
$ jobs [1]+ Stopped tar czf huge.tgz /very/big/dir -
让被挂起的进程在 后台 继续运行
$ bg %1 # “%1” 对应 jobs 输出的作业号 [1]+ tar czf huge.tgz /very/big/dir & -
把后台作业切回 前台
$ fg %1 tar czf huge.tgz /very/big/dir -
启动时就丢到后台(可选)
$ tar czf huge.tgz /very/big/dir & [1] 12345 -
配合
disown避免挂起时收到 SIGHUP(可选)$ disown %1
提示
%+或%%指“当前作业”;%-指“前一个作业”。- 没有参数时,
bg/fg默认操作当前作业。
在Windows操作系统中,没有与Unix/Linux的 fg(前台恢复)和 bg(后台运行)完全等效的直接命令,因为Windows的进程管理机制不同。但可以通过以下方法实现类似功能:
Windows 替代方案
1. 启动后台进程
- CMD 命令提示符:
start /B your_command.exe :: 后台启动(不创建新窗口) start "" your_command.exe :: 启动并最小化到后台(创建新窗口) - PowerShell:
Start-Job -ScriptBlock { your_command.exe } # 创建后台作业
2. 管理后台进程
- 查看所有进程:
tasklist :: CMD中查看进程列表Get-Process :: PowerShell中查看进程 Get-Job :: 查看后台作业 - 挂起/恢复进程:
- 使用
Suspend-Process和Resume-Process(需 管理员权限):Suspend-Process -Id <PID> # 挂起进程(类似Ctrl+Z) Resume-Process -Id <PID> # 恢复进程(类似fg) - 工具替代:使用 Sysinternals Suite 中的:
pssuspend.exe <PID>挂起进程pssuspend.exe -r <PID>恢复进程
- 使用
3. 将进程移到前台
- 无直接命令,需手动操作:
- 通过任务管理器找到进程并激活窗口。
- 使用
start /WAIT your_command.exe在CMD中等待前台完成。
PowerShell 作业管理示例
# 启动后台作业
$job = Start-Job -ScriptBlock { ping www.example.com }
# 查看作业
Get-Job
# 恢复作业到前台(等待输出)
Receive-Job -Id $job.Id -Wait
# 终止作业
Stop-Job -Id $job.Id
关键差异说明
- 作业控制机制:
Windows不原生支持Shell层的作业挂起(Ctrl+Z),而是依赖进程级API。 - 权限要求:
挂起/恢复进程需管理员权限,且可能影响稳定性。 - 推荐工具:
使用 PowerShell 或 Sysinternals工具集 实现最接近的功能。
建议:对于复杂任务,推荐使用PowerShell脚本或第三方工具(如Cygwin/WSL)模拟Unix环境。