実行中のプロセスのSTDOUTリダイレクトを参照してください


17

このコマンドでアプリを起動した場合:

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

そして、コマンドは戻りません、別のプロンプトから、STDOUTリダイレクトが設定されているものを確認する方法はありますか?

私はどちらかのようなものを探しています

cat /proc/PID/redirects

または

ps -??? | grep PID

しかし、どの方法でもかまいません。

回答:


22

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

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

パーフェクト!ありがとう!STDERRなど、他のリダイレクトに関するリンクや詳細、つまりそれらの番号を提供できますか?
リッチ

少なくともLinux(および他のすべてのUNIX系OSでは信じられます)では、0:stdin、1:stdout、2:stderr(標準エラー)です。<stdio.h>で定義されているCマクロもあります:STD {IN、OUT、ERR} _FILENO。詳細については、「man stdout」を参照してください。
ペトルウーゼル

stdin、stdout、stderrのそれぞれ0、1、2は、すべてのUnix / Unixライクシステムで保証されており、Windowsでも同様です。
ポールステリアン

MacOSではこれを行う方法はありますか?/ proc / <pid> / fd / 1が存在しない場合、mkfifoを使用できますか?
アレクサンダーミルズ

4

どのファイルがどのプロセスで開かれているかを確認する便利なツールですlsof。を使用して特定のプロセスを指すことlsof -p1234ができ、ls -l /proc/1234/fdLinuxで取得できる情報とほぼ同じ情報、つまりどのファイルが開かれるかがわかります。

最も有用なのlsofは、逆の方向に進むlsof /path/to/fileことです。どのプロセスがそのファイルを使用しているかを示します。


1

多くの答えは、この方法でそれを行うことを言及しています:

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.