如何将运行中的终端命令转入后台并重定向输出至日志文件
已运行进程后台化并重定向输出的解决办法
方法1:用reptyr工具(简单高效)
- 按
Ctrl+Z暂停当前命令,输入jobs -l查看进程PID(比如输出里的1234) - 输入
bg %1(%1是jobs列表里的序号,也可以直接写bg 1234)把进程丢到后台 - 安装reptyr:
- Debian/Ubuntu:
sudo apt install reptyr - macOS(Homebrew):
brew install reptyr
- Debian/Ubuntu:
- 新开一个终端,执行
reptyr 1234,这会把目标进程的终端关联转移到新窗口 - 在新终端里按
Ctrl+Z暂停进程,执行:
再输入exec > ~/logs/output.log 2>&1fg恢复进程,之后所有输出都会写入指定日志,原终端不会再被干扰
方法2:用gdb修改文件描述符(无额外工具,应急用)
- 同样先
Ctrl+Z暂停命令,jobs -l拿PID(比如1234),bg %1后台运行 - 执行以下命令(替换PID和日志绝对路径):
命令解释:gdb -p 1234 -batch -ex 'call close(1)' -ex 'call close(2)' -ex 'call open("/home/yourname/logs/output.log", 0x41, 0644)' -ex 'call dup2(1, 2)'close(1)/close(2):关闭进程的标准输出、标准错误描述符open(...):打开指定日志文件,系统会把它分配给刚释放的描述符1dup2(1,2):把标准错误重定向到和标准输出同一个文件
- 执行后,进程后续输出都会写入日志,原终端不再收到输出提示
注意:
- gdb方法需要进程的调试权限,可能需要用sudo执行,或者系统允许ptrace操作
- 日志路径尽量用绝对路径,避免进程工作目录不同导致找不到文件
内容的提问来源于stack exchange,提问作者Shreyas Balaji
相关产品推荐
相关产品推荐

