PIDを使用して任意のプロセスから出力を読み取ることは可能ですか?


32

fgジョブのコマンドを使用するのと同様の方法でPIDを使用して、既に実行中のプロセスに端末を接続することは可能ですか?


どのような?!添付したいプロセスは何ですか?!

私は別の端末で開始されたプログラムの出力を表示できるようにしたい
トミー

回答:


43

そのプロセスの標準ファイル記述子を取得できます。例stdout

tail -f /proc/<pid>/fd/1

8
このソリューションをtopで試しましたが、うまくいかないようです。ある端末ではtopを起動し、別の端末ではcorred pidでコマンドを使用しましたが、出力はありませんでした。
トミー

1
Macでこれをどのように行いますか?
アヴナーバール

stderrはどうですか?/ proc / <pid> / fd / 2を想定していますが、stdout / stderrの両方を取得するにはどうすればよいですか?
アレクサンダーミルズ

1
この記述子がソケットを指す場合はどうなりますか?尾はそれを読むことができません。# ls -la /proc/24510/fd/1 lrwx------ 1 root root 64 Oct 31 08:34 /proc/24510/fd/1 -> socket:[444026]
Imaskarは、

8

ここにはいくつかのオプションがあります。1つは、コマンドの出力をファイルにリダイレクトし、tailそのファイルに追加された新しい行をリアルタイムで表示するために使用することです。

別のオプションは、の内部でプログラムを起動することですscreen。これは、ある種のテキストベースのターミナルアプリケーションです。Screenセッションはアタッチおよびデタッチできますが、名目上は同じユーザーのみが使用することを意図しているため、ユーザー間でセッションを共有する場合。

それ以外の場合は、プロセスをトレースして、それが何をしているかを確認できますstrace

strace -e trace=open -p 22254 -s 80 -o output.txt
  • -p PID:プロセスID PIDを使用してプロセスに接続し、トレースを開始します。
  • -s SIZE:印刷する最大文字列サイズを指定します(デフォルトは32です)。
  • -o filename:トレース出力を画面(stderr)ではなくファイルfilenameに書き込みます。

最後に、機能していないようです。topを起動し、cord pidでコマンドを使用しましたが、期待した出力が得られませんでした。あとで尻尾を使うと。
トミー

sudoプロセスにアタッチするにはstrace を使用する必要があり-o ~/output.txt、ファイルがホームフォルダーに残るように使用する必要があります。

出力ファイルを使用して、画面に送信しないでください!私のようにバカにならないで、Ctrl-Cを押してstraceから抜け出し、PIDを切り離します。重要な脚本で私からくそを怖がらせた。
ウェストンガンガー

3

以下に示すこれらのコマンドを使用して、実行中のプロセスを別の端末に接続できます。

  • retty(マニュアルページ:retty
  • reptyr
  • screen

例:

screen -S PID
retty $(pgrep PID)
reptyr PID

rettyまたはreptryが見つかりませんでした。また、画面を使用できるようにするには、元のプロセスを起動して、問題が解決しないようにする必要があります。
トミー

コマンドを使用してインストールできますがsudo apt-get install retty、rettyにはいくつかの制限があります。回答に記載されているmanページをご覧ください。
-devav2
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.