我刚刚运行一项工作(假设foo.sh)。
./foo.sh
[Press Ctrl-Z to stop]
bg # enter background
并且它会将输出生成到 stdout 和 stderr。是否有任何方法可以将 stdout 和 stderr 重定向到其他文件而不是当前屏幕?
答案1
显然我第一次误读了你的问题,所以这是我更新后的答案:
将程序发送到后台后,首先必须找到它的 PID
pgrep foo.sh
然后你可以使用它gdb
来附加到该进程
gdb -p <PID>
然后你gdb
改变这个程序写入的位置
p dup2(open("/path/to/file",577, 420), 1)
p dup2(1, 2)
然后你脱离这个过程并退出gdb
detach
quit
一点解释
577
相当于O_CREAT|O_WRONLY|O_TRUNC
420
相当于S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH
- 因此,调用
open
打开文件并将其截断为 0 字节(如果存在)或创建一个具有正确文件权限的新文件(如果不存在) - 第一次调用
dup2
复制对文件描述符的调用返回的文件描述符open
(1
即stdout
) - 第二次调用将
dup2
文件描述符复制1
到2
(即stderr
)