運行進程所使用的命令

運行進程所使用的命令

假設我使用以下命令運行該進程:

myapp -e -c -f myapp.config > /var/log/myapp/myapp.log 2>&1

一段時間後,我只有pid進程myapp,例如myapp.log1234 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

請注意,我已使用重定向輸出>>來附加到您的日誌檔案。

答案3

使用ps -f您可以檢查參數列表,也可以將其重定向到任何檔案。

所以,在這種情況下只需使用ps -ef | grep 1234 > myapp.log

請檢查這個ps 手冊頁

相關內容