Files
Knowledge/1 使用/程序在后台执行的技巧.md
T

3.3 KiB
Raw Blame History

Linux 下 bg / fg 的典型用法

  1. 启动一个长时间运行的前台进程

    $ tar czf huge.tgz /very/big/dir
    # 终端被占用
    
  2. 挂起(Suspend)该进程
    按下 Ctrl-Z

    [1]+  Stopped                 tar czf huge.tgz /very/big/dir
    
  3. 查看当前 shell 的作业列表

    $ jobs
    [1]+  Stopped                 tar czf huge.tgz /very/big/dir
    
  4. 让被挂起的进程在 后台 继续运行

    $ bg %1          # “%1” 对应 jobs 输出的作业号
    [1]+ tar czf huge.tgz /very/big/dir &
    
  5. 把后台作业切回 前台

    $ fg %1
    tar czf huge.tgz /very/big/dir
    
  6. 启动时就丢到后台(可选)

    $ tar czf huge.tgz /very/big/dir &
    [1] 12345
    
  7. 配合 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环境。