Linux

查看程序的輸出被重定向到什麼

  • October 20, 2020

我有一個程序應該將他的輸出重定向到 output.txt。不幸的是,輸出沒有轉到這個文件。首先,我檢查了我是否從另一個目錄呼叫它,但是除了輸出應該去的那個之外,沒有 output.txt。所以我檢查了輸出,sudo tail -f /proc/2027/fd/1發現程序執行得很好並且有一個有效的輸出。我也很確定我正在正確地開始這個過程,因為它已經工作了,我沒有改變任何東西。我現在的問題是該過程的輸出在哪裡?我只能找到查看輸出的解決方案,例如:如何在另一個 bash 會話中查看正在執行的程序的輸出?. 但我想看看輸出重定向到哪裡。只是為了完整起見,這是我在 java 中啟動該過程的方式:

ProcessBuilder builder = new ProcessBuilder("java", "-jar", "variobox.jar");
builder.redirectOutput(new File("out.txt"));
builder.redirectError(new File ("error.txt"));
builder.start();

您非常接近顯示/proc/$pid/fd/1. 如您所見,這將向您顯示發送到標準輸出的輸出。但是要查看從何處發送標準輸出,您只需查看該符號連結的目標:

$ sleep 20 & pid=$!
[1] 88972
$ readlink -f /proc/$pid/fd/1
/dev/pty0
$  sleep 20 > /dev/null & pid=$!
[1] 99996
readlink -f /proc/$pid/fd/1
/dev/null

如果連結的目標是管道,並且您想查找另一端的內容,請參閱unix 管道另一端的程序名稱?. 如果連結的目標是一個套接字,並且您想查找另一端的內容,請參閱誰得到了這個 unix 套接字對的另一端?.

但是,如果您看到的輸出不是發送到output.txt文件的輸出,這似乎表明您看到的輸出實際上不是輸出(或者更具體地說不是標準輸出)。它可能是標準錯誤,即文件描述符2

引用自:https://unix.stackexchange.com/questions/615489