Process

如何找到正在執行給定程序的程序?

  • April 1, 2020

有沒有辦法找出哪個程序正在執行我的腳本?

我正在執行 I3 作為我的視窗管理器,我想使用sxkhdbynd 鍵而不是 i3config,但是有些東西不斷替換我的 sxkhd bynds,所以我想追踪它是什麼。也許我可以使用strace,但我還沒有弄清楚如何使用。

感謝您的回答

編輯:

原來我沒有殺死我的舊sxkhd程序,所以他們因執行我的腳本而感到內疚,但

我仍然很好奇我怎麼能追踪這些執行

在 Linux 上,您可以從$PPID變數或 /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。如果您從命令行啟動它,它將是您的 shell 的 PID,例如 /bin/bash。

引用自:https://unix.stackexchange.com/questions/577161