## Linux 下 `bg` / `fg` 的典型用法 1. 启动一个长时间运行的前台进程 ```bash $ tar czf huge.tgz /very/big/dir # 终端被占用 ``` 2. 挂起(Suspend)该进程 按下 `Ctrl-Z` ``` [1]+ Stopped tar czf huge.tgz /very/big/dir ``` 3. 查看当前 shell 的作业列表 ```bash $ jobs [1]+ Stopped tar czf huge.tgz /very/big/dir ``` 4. 让被挂起的进程在 **后台** 继续运行 ```bash $ bg %1 # “%1” 对应 jobs 输出的作业号 [1]+ tar czf huge.tgz /very/big/dir & ``` 5. 把后台作业切回 **前台** ```bash $ fg %1 tar czf huge.tgz /very/big/dir ``` 6. 启动时就丢到后台(可选) ```bash $ tar czf huge.tgz /very/big/dir & [1] 12345 ``` 7. 配合 `disown` 避免挂起时收到 SIGHUP(可选) ```bash $ disown %1 ``` > 提示 > - `%+` 或 `%%` 指“当前作业”;`%-` 指“前一个作业”。 > - 没有参数时,`bg`/`fg` 默认操作当前作业。 在Windows操作系统中,没有与Unix/Linux的 `fg`(前台恢复)和 `bg`(后台运行)完全等效的直接命令,因为Windows的进程管理机制不同。但可以通过以下方法实现类似功能: --- ### **Windows 替代方案** #### 1. **启动后台进程** - **CMD 命令提示符**: ```cmd start /B your_command.exe :: 后台启动(不创建新窗口) start "" your_command.exe :: 启动并最小化到后台(创建新窗口) ``` - **PowerShell**: ```powershell Start-Job -ScriptBlock { your_command.exe } # 创建后台作业 ``` #### 2. **管理后台进程** - **查看所有进程**: ```cmd tasklist :: CMD中查看进程列表 ``` ```powershell Get-Process :: PowerShell中查看进程 Get-Job :: 查看后台作业 ``` - **挂起/恢复进程**: - 使用 **`Suspend-Process`** 和 **`Resume-Process`**(需 **管理员权限**): ```powershell Suspend-Process -Id # 挂起进程(类似Ctrl+Z) Resume-Process -Id # 恢复进程(类似fg) ``` - 工具替代:使用 **[Sysinternals Suite](https://learn.microsoft.com/zh-cn/sysinternals/)** 中的: - `pssuspend.exe ` 挂起进程 - `pssuspend.exe -r ` 恢复进程 #### 3. **将进程移到前台** - 无直接命令,需手动操作: - 通过任务管理器找到进程并激活窗口。 - 使用 `start /WAIT your_command.exe` 在CMD中等待前台完成。 --- ### **PowerShell 作业管理示例** ```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环境。