以下を使用してアプリケーションを起動した場合:
/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
どのプロセスがファイルを使用しているかを教えてくれます。