どのプログラムが私のスクリプトを実行しているかを調べる方法はありますか?
私はウィンドウマネージャとしてI3を実行しており、i3configの代わりにbyndキーを使用したいのですが、sxkhd
何かが私のsxkhd byndを置き換え続けるので、それが何であるかを追跡したいと思います。たぶんそれを使用するかもしれませんが、strace
まだ方法が見つかりませんでした。
答えてくれてありがとう。
編集:
以前のプロセスを終了していないsxkhd
ので、以前のプロセスが私のスクリプトを実行したことがわかりましたが、
まだこれらの実行を追跡する方法は疑問に思います。
ベストアンサー1
$PPID
Linuxでは、変数または/proc/pid/statusから親プロセスのPIDを取得できます。たとえば、デーモンの場合、親プロセスは常に呼び出しプロセスではないが、通常はそうです。つまり、各プログラムを親プロセスのPIDを最初にファイルに書き込んでから、元のバイナリを実行するラッパーに変換することができます。私はsxkhdを使用しませんが、X11を使用するときにxeyesを例に挙げます。xeyes
次の内容を含むスクリプトを作成して実行可能にします。
#!/usr/bin/env sh
printf "PPID: %d\n" "$PPID" >> /tmp/XEYES_RUN
xeyes.orig "$@"
ここで、元の xeyes バイナリの名前を xeyes.orig に変更します。
sudo mv "$(command -v xeyes)" "$(dirname $(command -v xeyes))"/xeyes.orig
xeyes
ソースをスクリプトラッパーに置き換えます。
sudo cp ./xeyes "$(dirname $(command -v xeyes.orig))"
一般通貨xeyes
:
xeyes
xeyes が実行されるたびに、親プロセスの PID が /tmp/XEYES_RUN に追加されます。コマンドラインから起動すると、/bin/bash と同じシェルの PID になります。