プロセスの実行に使用されたコマンド


8

次のコマンドでプロセスを実行したとします。

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

しばらくするとpidmyappプロセスは1234 myapp.logだけになりpidます。すべてのフラグを指定してコマンドを取得し、出力を何らかの方法でリダイレクトする方法はありますか?

回答:


10
ps -o args= -p "$pid"

プロセスが引数リストを後でオーバーライドしなかった場合、プロセスが実行した最後のコマンドに与えられた引数リスト(または、実行されなかった場合は、その親が実行したコマンド)を教えてくれます。

psいくつかのps実装でいくつかの-wオプションを追加することで上げることができる可能性がある制限まで、スペースで連結された引数リストが表示されます)。Linuxでは、NULバイトで区切られたarglistをで確認できます/proc/$pid/cmdline

lsof +fg -ap "$pid" -d 0-2

プロセスのstdin、stdout、およびstderrファイル記述子が何を指しているか、およびそれらが開かれたモードを示します(POSIXシェルでリダイレクトが使用されたW,APかのように、追加を伴う書き込み専用の場合のように>>)。


lsofプロセスのリダイレクト先を検出するために使用する+1myapp.log
joeytwiddle

1
出力ファイルを見つけるための別の方法は次のとおりです。readlink /proc/$pid/fd/1
joeytwiddle

ああ、私はOPがプロセスフラグを意味するのではなく、コマンドとそのオプションの出力を意味すると思っていました!いい答えだ。
アロニカル2016

4

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

ただし、これはヘッダーファイルを出力しますが、ログファイルには必要ない場合があります。-hpidが1234の場合、オプションを使用してこれをトリミングできます。

ps -lhp 1234 >> /var/log/myapp/myapp.log 2>&1

>>ログファイルに追加するためにを使用して出力をリダイレクトしたことに注意してください。


ヘッダー行を削除するにはtail -n+1(GNUが必要ですが、QはLinux / Ubuntuでした)。またはps -h{f,l}p 1234(GNUでも)問題を回避します。
dave_thompson_085 2016

@ dave_thompson_085おかげで、ヘッダーを削除するオプションがあることはわかっていましたが、マンページまで十分にスクロールできませんでした。tail -n1Ubuntuで確実に動作しますが、なぜ+必要なのですか?
アロニカル2016

私はデイブtail -n+2が最初のものを除くすべての行を表示することを示唆することを意図したと思う tail -n1最後の行だけを表示します。比較:seq 1 10 | tail -n+2など。
joeytwiddle 2016

1
@joeytwiddleああ、わかった-h。不要なパイプや余分なプロセスを回避するために、彼のアドバイスを含めるように編集した。
Arronical 2016

1

を使用ps -fすると、引数リストを確認したり、任意のファイルにリダイレクトしたりできます。

したがって、この場合は、 ps -ef | grep 1234 > myapp.log

このps manページを確認してください


1
これはgrepコマンドの詳細も出力しませんか?
アロニカル2016

2
@Arronicalはい、そうです。あなたはgrepのコマンドを除外することでこれを避けることができます:ps -ef | grep 'foo' | grep -v grep
maulinglawns

@maulinglawnsは、grepルートを下った場合に私がしたことですが、ヘッダーも削除するという利点があります。
アロニカル

避けるためにgrep -v:私はこのトリックを使うgrep '123[4]'
joeytwiddle
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.