実行中のプロセスの STDOUT リダイレクトの表示

実行中のプロセスの STDOUT リダイレクトの表示

以下を使用してアプリケーションを起動した場合:

/path/to/my/command >> /var/log/command.log

コマンドが返されない場合は、他のプロンプトでSTDOUTリダイレクトがどのように設定されているかを確認する方法はありますか?

似たようなものを探しています。

cat /proc/PID/redirects

または

ps -??? | grep PID

しかし、どんな方法でも可能です。

答え1

ファイル記述子#1(STDOUT)を表示します/proc/$PID/fd/。カーネルは、このファイルを記述子がリダイレクトされるファイルへのシンボリックリンクとして表します。

$ readlink -f /proc/20361/fd/1
/tmp/file

答え2

多くの答えでは、次のように言及しています。

tail -f /proc/{PID}/fd/1

しかし、私はそれが常に動作するわけではないことを発見しました。あるいはcat時には結果をもたらします。

cat /proc/{PID}/fd/1

そのうち{PID}は命令を使って見つけることができますps aux

コマンドの最後にある数字(この場合fd / 1)を別の出力に変更できることにも言及する価値があります。

 /proc/{PID}/fd/0 # STDIN
 /proc/{PID}/fd/1 # STDOUT
 /proc/{PID}/fd/2 # STDERR

答え3

どのプロセスでどのファイルが開いているかを確認するための便利なツールlsof。特定のプロセスを指すことができ、基本的にLinuxで得られたものと同じ情報(どのファイルが開いているか)を見るlsof -p1234ことができます。ls -l /proc/1234/fd

最も有用な方法lsofはその逆です。つまり、lsof /path/to/fileどのプロセスがファイルを使用しているかを教えてくれます。

関連情報