プロセスが実行されたコマンド

プロセスが実行されたコマンド

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

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

しばらくすると、プロセス(例:1234)pidのみが表示されmyappます。 だけで、すべてのフラグを使用してコマンドを取得し、出力をmyapp.log何らかの方法でリダイレクトする方法はありますかpid

答え1

ps -o args= -p "$pid"

プロセスがその後引数リストを上書きしない限り、プロセスが最後に実行したコマンド (または、何も実行しなかった場合は、その親が実行したコマンド) に与えられた引数リストが通知されます。

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

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

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

答え2

psコマンドを使用し、-pスイッチで調べる pid を指定すると、-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

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

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

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

答え3

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

この場合はps -ef | grep 1234 > myapp.log

ご確認くださいps マニュアルページ

関連情報