継続的に実行されているプロセスを追跡する方法は?

継続的に実行されているプロセスを追跡する方法は?

zshだから、、、、でファイルがどのように開くのか正確な順序を知りたいのですが.xinitrc。だから私はシステムコールがどのように呼び出されるかを確認するためにそのコマンドで遊ぶことにしました、そして最終的にこのファイルをロードする方法を決めて注文することができました。.xprofile.zprofilestracezshgrepopen

私のコマンド:

strace zsh | grep open

ただし、このプログラムを実行すると、出力が表示され動作しなくzshなりgrepます。プロセスを終了してもctrl+d何も起こりません。

grepそれでは、この過程でそのような結果を得る方法はありますか?

答え1

straceデフォルトでは、出力をstderrに送信します。

ここでは、次のことができます。

strace -o >(grep --color open >&2) zsh

名前、パラメータ、または実行時に戻り値のzshすべてのシステムコールを表示するか、次の操作を行います。open

strace -e /open zsh

(の略語strace -e trace=/open zsh)または:

名前に含まれるシステムコールを見てくださいopen(例:open、openat、pidfd_open、mq_open、open_by_handle_at、perf_event_open。リストはシステムとバージョンによっては正確ではないかもしれません)。

または:

strace -e open,openat zsh

これら2つのシステムコールにのみ適用されます。

この出力は、シェルのプロンプトとコマンド出力とともに端末に送信されます。後でスキャンできるファイルに送信したり、別の端末またはscreen/tmuxウィンドウに送信したりすることをお勧めします。

strace -o >(grep --color open > strace.log) zsh
strace -e /open -o strace.log zsh

サブプロセスやそのサブプロセスで実行されるコマンドなど、サブプロセスで実行された呼び出しを追跡するには、この-fオプションが必要です。

~/.xinitrcしたがって、システムを開く要素(そしてそれとは何の関係もありませんzsh)とそれが利用可能な時期audit(システムにデフォルトでインストール/アクティブ化されない可能性があります)を見てください。

関連情報