プロセス名を使用して実行中のプロセスからコマンド引数またはコマンドライン全体を取得するにはどうすればよいですか?
たとえば、次のプロセスは次のようになります。
# 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を使用しています。
ベストアンサー1
-o
スイッチを使用して出力フォーマットを指定できます。
$ ps -eo args
~からマニュアルページ:
コマンドとそのパラメーターはどちらも文字列です。パラメーターの修正が表示されることがあります。 [...]
-p
スイッチを使用して特定のPIDを選択することもできます。
$ ps -p [PID] -o args
pidof
-p
プロセス名からPIDへの切り替えにも使用できるため、名前は許可されます。
$ 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)