straceから別のウィンドウに出力

straceから別のウィンドウに出力

どうやって理解したいとしましょう。カナダ作品:ストレス

strace出力を別のウィンドウにリダイレクトできますか?

したがって、2つのウィンドウを持つことができます。 1つはすべての対話を実行するウィンドウ、もう1つはstrace出力用のウィンドウです。

答え1

strace -pあるウィンドウでこれを使用して、別のウィンドウで実行されているコマンドを追跡できます。この-pオプションは1つ以上のプロセスIDを受け入れるため、次のことを試すことができます。

strace -p "$(pidof pry)"

pidofとして識別されたプロセスが1つ以上ある場合はpry実験する必要があり(代わりに使用する必要があるコマンドをpidof追跡したい場合)、それに関連するあいまいさがある場合を使用するのが最善のアプローチではない可能性があります。一致するコマンドは複数ありますが、そのうちの1つだけが必要です)。正しいプロセスを見つけてオプションを直接提供する方が簡単かもしれません。pudb3python3pudb3pidofstraceps

このアプローチは、短時間のプロセスやプロセスの寿命の早い段階で出力を確認することが重要な場合には適していませんが、起動時間が特に興味深いものではない対話型アプリケーションには適しています。

strace -pこれを使用することとstrace使用しないことの違いの1つは、-p割り込みを処理する方法です。によって開始されたプロセスはstrace同様の割り込みCtrl-Cを受け取り、によって報告されますが、プロセスを分離し、追跡するstraceことなくプロセスを続行できます(アプリケーションが別のウィンドウにある場合はまだアプリケーション操作にある可能性があります)。 。Ctrl-Cstrace -pCtrl-C

答え2

短期プロセスまたはプロセスライフサイクルの最初に出力を確認することが重要な場合、ラッパーメソッドは次のようになります。

#!/bin/sh

# the pid could be sent to a file or named pipe the-thing-that-does-
# strace could be watching, though in most cases a human could copy it
echo "PID to strace is $$"

trap : USR2

# block while human copies pid over to strace (or some program acts on
# the above pid being written in that other terminal). Busy loop or
# something instead if this program must not consume input (`sleep`
# complicates the signal handling)
read blocking

# then when strace is up, send this process a USR2 signal. this will
# mean there will be some strace of this script in addition to the
# target, hence the kinda sorta caveat.
exec echo /the/program/of/interest

または、sysdig別のターミナルウィンドウでプログラムを実行して、名前sysdigで直接プログラムを監視することもできます。

sysdig -p '%proc.name %evt.type(%evt.args)' \
    proc.name contains /the/program/of/interest

関連情報