假設我使用以下命令運行該進程:
myapp -e -c -f myapp.config > /var/log/myapp/myapp.log 2>&1
一段時間後,我只有pid
進程myapp
,例如myapp.log
1234 pid
。
答案1
ps -o args= -p "$pid"
將告訴您為進程執行的最後一個命令提供的參數清單(或如果它沒有執行任何命令,則其父級執行的命令...),前提是該進程隨後沒有覆蓋其參數列表。
ps
將顯示 arg 清單與空格連接,並且達到一個限制,您可以ps
透過新增幾個-w
選項來透過某些實作來提高該限制)。在 Linux 上,您可以在 中看到由 NUL 位元組分隔的 arglist /proc/$pid/cmdline
。
lsof +fg -ap "$pid" -d 0-2
將告訴您進程的 stdin、stdout 和 stderr 檔案描述符指向什麼以及它們打開的模式(例如W,AP
帶有附加的只寫,就像>>
在 POSIX shell 中使用重定向一樣)。
答案2
您可以使用該ps
命令,並指定要使用開關檢查的 pid -p
,使用-f
開關給出完整列表,或-l
更詳細的長列表。
作為輸出的範例:
$ sleep 60 &
[1] 31441
$ ps -lp 31441
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 0 31441 31319 0 80 0 - 1423 hrtime pts/3 00:00:00 sleep
$ ps -fp 31441
UID PID PPID C STIME TTY TIME CMD
root 31441 31319 0 10:44 pts/3 00:00:00 sleep 60
但是,這會輸出一個標題行,您可能不希望在日誌檔案中出現該標題行。-h
如果你的 pid 是 1234,你可以使用以下選項來修剪它:
ps -lhp 1234 >> /var/log/myapp/myapp.log 2>&1
請注意,我已使用重定向輸出>>
來附加到您的日誌檔案。