vault backup: 2026-11-07 16:33:44
This commit is contained in:
@@ -0,0 +1,119 @@
|
||||
|
||||
## 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 <PID> # 挂起进程(类似Ctrl+Z)
|
||||
Resume-Process -Id <PID> # 恢复进程(类似fg)
|
||||
```
|
||||
- 工具替代:使用 **[Sysinternals Suite](https://learn.microsoft.com/zh-cn/sysinternals/)** 中的:
|
||||
- `pssuspend.exe <PID>` 挂起进程
|
||||
- `pssuspend.exe -r <PID>` 恢复进程
|
||||
|
||||
#### 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环境。
|
||||
Reference in New Issue
Block a user