web-dev-qa-db-ja.com

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

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

29
Tommy

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

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

ここにはいくつかのオプションがあります。 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に書き込みます。
8
user61928

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

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

例:

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