短期プロセスに関する情報の取得

短期プロセスに関する情報の取得

既存のプロセス、特にそのパラメータ(環境変数、cwdディレクトリ、stdoutなど)を追跡したいと思います。私はできる。ただし、短期プロセスに関する情報は取得できません。)例えば:

私が実行した場合:

sleep 120 & 
# get info from /proc/`pgrep sleep` 

それは簡単です。

しかし、私のプロセスがすぐに終了した場合、またはプロセスのPIDがわからない場合(しかし、いくつかのプロセスが生成されると予想される場合)はどうすればよいですか?

ベストアンサー1

一般ユーザーの1つのアプローチは、プログラムが検索を介して実行されるとexec仮定するラッパーですPATH。つまり、program

#!/bin/sh
env > /some/log/file
... (any other desired logging commands here) ...
exec /path/to/real/program "$@"

に最初に存在する必要があるため、記録したい実際の名前と正確に一致する名前のラッパーをPATH持つことができ、ラッパー内でラッパーを元の名前に置き換えることができます。プログラムが完全修飾パスを介して実行されている場合は、同様のものを調整する必要があり、関連するアプリケーションがパスを変更するオプションを提供できます。PATH=/some/wrapper/dir:$PATHprogramprogramprogramprogramexecLD_PRELOAD

なぜならrootsysdigさまざまなsysdigの例ls)関心のある一時プロセス名と一致し、プログラムが特定のユーザーとして実行されていると仮定すると、興味のある項目にドリルダウンできるためです。

sudo sysdig "proc.name = ls and user.name = jhqdoe" | tee log

やや長いファイルを実行すると、必要なほとんどlogすべてを提供する項目が表示されます(環境は切り捨てられます)。lsexecve

9734 16:12:49.683389228 1 ls (20542) < execve res=0 exe=ls args=--color=auto. tid=20542(ls) pid=20542(ls) ptid=20052(bash) cwd= fdlimit=1024 pgft_maj=0 pgft_min=61 vm_size=404 vm_rss=4 vm_swap=0 comm=ls cgroups=cpuset=/.cpu_cgroup=/.cpuacct=/.mem_cgroup=/.devices=/user.slice.freezer=/.ne... env=XDG_SESSION_ID...

渡すユーザーマニュアルexecveその他の文書では、上記の内容は、呼び出しと表示の完全なコンテキストまで正確である可能性があります。

sudo sysdig -p "%proc.env" "proc.name = ls and user.name = jhqdoe and evt.type = execve" | tee xxx

-p必要な内容を表示するように調整してください。ドラッグを使用して、リアルタイムのキャプチャや保存されたファイルなどから目的のコンテンツを抽出することもできます。

おすすめ記事