答え1
strace -p
あるウィンドウでこれを使用して、別のウィンドウで実行されているコマンドを追跡できます。この-p
オプションは1つ以上のプロセスIDを受け入れるため、次のことを試すことができます。
strace -p "$(pidof pry)"
pidof
として識別されたプロセスが1つ以上ある場合はpry
実験する必要があり(代わりに使用する必要があるコマンドをpidof
追跡したい場合)、それに関連するあいまいさがある場合を使用するのが最善のアプローチではない可能性があります。一致するコマンドは複数ありますが、そのうちの1つだけが必要です)。正しいプロセスを見つけてオプションを直接提供する方が簡単かもしれません。pudb3
python3
pudb3
pidof
strace
ps
このアプローチは、短時間のプロセスやプロセスの寿命の早い段階で出力を確認することが重要な場合には適していませんが、起動時間が特に興味深いものではない対話型アプリケーションには適しています。
strace -p
これを使用することとstrace
使用しないことの違いの1つは、-p
割り込みを処理する方法です。によって開始されたプロセスはstrace
同様の割り込みCtrl-Cを受け取り、によって報告されますが、プロセスを分離し、追跡するstrace
ことなくプロセスを続行できます(アプリケーションが別のウィンドウにある場合はまだアプリケーション操作にある可能性があります)。 。Ctrl-Cstrace -p
Ctrl-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