GNU/Linux >> Linux の 問題 >  >> Linux

別のBashセッションで実行中のプロセスの出力を表示する方法は?

ローカルで作業していたときから、リモートマシンでスクリプトを実行したままにしました。 SSH経由で同じユーザーとしてマシンに接続し、psで実行されているスクリプトを確認できます。 。

$ ps aux | grep ipcheck
myuser  18386  0.0  0.0  18460  3476 pts/0    S+   Dec14   1:11 /bin/bash ./ipchecker.sh

ローカルセッションのstdoutに出力しているだけです(./ipchecker.shを実行しました ローカルターミナルウィンドウを形成し、リダイレクトやscreenの使用はありません など)。

とにかくSSHセッションから、この実行中のコマンドの出力を(停止せずに)表示できますか?

これまでのところ、私が見つけた最善の方法は、strace -p 18386を使用することです。 しかし、画面上に大量のテキストが表示され、詳細すぎます。 straceを停止できます 次に、出力をふるいにかけて、テキストがstdoutに印刷されていることを確認しますが、非常に長くて混乱します。明らかに、停止している間、何かを見逃す可能性があります。ローカルで作業しているかのように、スクリプトの出力をライブで確認する方法を見つけたいと思います。

誰かがこれを改善できますか?明白な答えは、リダイレクトまたはscreenでスクリプトを再起動することです セッションなど、これはミッションクリティカルなスクリプトではないので、それを行うことができます。むしろ、これは楽しい学習演習だと思います。

承認された回答:

既存のプロセスをスパイするだけの場合は、strace -p1234 -s9999 -e writeを使用できます。 ここで、1234はプロセスIDです。 (-s9999 文字列が32文字に切り捨てられないようにし、write 出力を生成するシステムコール。)特定のファイル記述子に書き込まれたデータのみを表示する場合は、strace -p1234 -e trace= -e write=3のようなものを使用できます。 ファイル記述子3に書き込まれたデータのみを表示するには(-e trace= システムコールがログに記録されないようにします)。すでに作成されている出力は得られません。

出力のスクロール速度が速すぎる場合は、lessなどのページャーにパイプで送ることができます。 、またはstrace -o trace.log …を使用してファイルに送信します 。

多くのプログラムでは、ptraceハックを使用して、現在の端末または新しい画面セッションのいずれかに後続の出力を転送できます。実行中のプロセスの所有権を剥奪し、それを新しい画面シェルに関連付けるにはどうすればよいですか?を参照してください。およびその他のリンクされたスレッド。

システムの設定方法によっては、これらすべてのstraceを実行する必要がある場合があることに注意してください。 プロセスが追加の権限なしでユーザーの下で実行されている場合でも、rootとしてコマンドを実行します。 (プロセスが別のユーザーとして実行されている場合、またはsetuidまたはsetgidである場合は、straceを実行する必要があります。 ほとんどのディストリビューションでは、プロセスがその子を追跡することしかできません(これにより、中程度のセキュリティ上の利点が得られます。マルウェアの直接的な注入は防止されますが、ファイルの変更による間接的な注入は防止されません)。これは、kernel.yama.ptrace_scomeによって制御されます。 sysctl。

関連:KubernetesAutomationを使用してクラウドオペレーションゲームに勝ち、プロセスのコストを削減する方法
Linux
  1. 実行中のプロセスの出力リダイレクトを変更するにはどうすればよいですか?

  2. Linux –実行中のプロセスの壁掛け時計の時間を取得する方法は?

  3. 別のディレクトリにファイルを一覧表示するためにBashオートコンプリートをカスタマイズする方法は?

  1. 組み込みコマンドをbashするためにstraceすることは可能ですか?

  2. マルチスレッド プロセスのスレッド ID を、実行中の別のプロセスのプロセス ID と同じにすることはできますか?

  3. 実行中のプロセスのウォールクロック時間を取得するにはどうすればよいですか?

  1. Bashが実行されているTtyを取得する方法は?

  2. SSHで実行中のユーザーのプロセスを表示するにはどうすればよいですか?

  3. すでに実行中のプロセスの出力をリダイレクトする方法