Process
如何找到正在執行給定程序的程序?
有沒有辦法找出哪個程序正在執行我的腳本?
我正在執行 I3 作為我的視窗管理器,我想使用
sxkhd
bynd 鍵而不是 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。