我只是運行一個作業(假設 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
)