Scripting

如何從程序中獲取整個命令行?

  • July 15, 2021

如何使用程序名稱從正在執行的程序中獲取命令參數或整個命令行?

例如這個過程:

# 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)

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