プロセスからコマンドライン全体をインポートする方法は?

プロセスからコマンドライン全体をインポートする方法は?

プロセス名を使用して実行中のプロセスからコマンド引数またはコマンドライン全体を取得するにはどうすればよいですか?

たとえば、次のプロセスは次のようになります。

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

おすすめ記事