Scripting
如何從程序中獲取整個命令行?
如何使用程序名稱從正在執行的程序中獲取命令參數或整個命令行?
例如這個過程:
# ps PID USER TIME COMMAND 1452 root 0:00 /sbin/udhcpc -b -T 1 -A 12 -i eth0 -p /var/run/udhcpc.eth0.pid
而我想要的是
/sbin/udhcpc -b -T 1 -A 12 -i eth0 -p /var/run/udhcpc.eth0.pid
或論點。我知道程序名稱並想要它的參數。我在 SliTaz 上使用 Busybox。
您可以使用
-o
開關來指定您的輸出格式:$ ps -eo args
從手冊頁:
將其所有參數作為字元串的命令。可能會顯示對參數的修改。
$$ … $$
您也可以使用
-p
開關來選擇特定的 PID:$ ps -p [PID] -o args
pidof
也可用於從程序名稱切換到 PID,因此允許使用-p
名稱:$ ps -p $(pidof dhcpcd) -o args
當然,您也可以
grep
為此使用(在這種情況下,您必須添加-e
開關):$ ps -eo args | grep dhcpcd | head -n -1
GNU ps 還允許您刪除標題(當然,在使用 時這是不必要的
grep
):$ ps -p $(pidof dhcpcd) -o args --no-headers
在其他系統上,您可以通過管道連接到 AWK 或 sed:
$ ps -p $(pidof dhcpcd) -o args | awk 'NR > 1' $ ps -p $(pidof dhcpcd) -o args | sed 1d
編輯:如果您想將此行擷取到變數中,請
$(...)
照常使用:$ CMDLINE=$(ps -p $(pidof dhcpcd) -o args --no-headers)
或者,使用
grep
:$ CMDLINE=$(ps -eo args | grep dhcpcd | head -n -1)