isc-dhcp-server является новым названием пакета dhcp3-сервера, таким образом, это ведет себя как ожидалось. Сержант Debian довольно стар, таким образом, можно ожидать что учебное руководство устареть.
Вы можете использовать переключатель -o
для указания формата вывода:
$ ps -eo args
Из man page:
Command со всеми его аргументами в виде строки. Могут быть показаны изменения в аргументах. [... ]
Вы также можете использовать переключатель -p
для выбора конкретного ПИД:
$ ps -p [PID] -o args
pidof
также может быть использован для переключения с имени процесса на ПИД, что позволяет использовать -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
Edit: если вы хотите перехватить эту строку в переменную, просто используйте $(. ...)
] как обычно:
$ CMDLINE=$(ps -p $(pidof dhcpcd) -o args --no-headers)
или, с помощью grep
:
$ CMDLINE=$(ps -eo args | grep dhcpcd | head -n -1)
Попробуйте что-то вроде этого:
(например, пример выхода от Bitebox на OpenWRT на одном из моих маршрутизаторов)
root@ap8:~# xargs -0 printf '%s\n' </proc/991/cmdline
/usr/sbin/uhttpd
-f
-h
/www
-r
ap8
-x
/cgi-bin
-u
/ubus
-t
60
-T
30
-k
20
-A
1
-n
3
-N
100
-R
-p
0.0.0.0:80
-p
[::]:80
/ proc / $ PID / cmdline
содержит аргументы процесса $ PID
как строки C-ish один за другим. Каждая строка равен нулю.
Цитаты Враща Некоторые аргументы или варианты являются оболочками. Вы должны посмотреть ближе к показанным линиям, и где используются пробелы или другие символы со специальным значением для оболочки. Вам нужно будет процитировать этот символ как-то или полный аргумент при присоединении к этим строкам в командную строку снова.
Вы можете использовать PS-PR -AEF | GREP 1234
.
$ ps -eaf | grep 28865
saml 28865 9661 0 03:06 pts/2 00:00:00 bash -c sleep 10000; while [ 1 ];do echo hi;sleep 10;done
saml 28866 28865 0 03:06 pts/2 00:00:00 sleep 10000
Примечание: BiteBox's PS
не включает в себя коммутаторы --Reaf
, как показано выше, из типичного PS
, который включен в Большинство Linuxes, однако, Bitebox's PS
показывает, что выглядит очень похожим на вывод на пример, который я предоставил. Вы можете установить Busybox в большинстве Linuxes и запустите его так:
$ busybox ps
852 root 0:00 /sbin/auditd -n
855 root 0:01 /sbin/audispd
857 root 0:00 /usr/sbin/sedispatch
866 root 0:00 /usr/sbin/alsactl -s -n 19 -c -E ALSA_CONFIG_PATH=/etc/alsa/alsactl.conf --initfile=/lib/alsa/init/00main rdaemon
867 root 0:00 /usr/libexec/bluetooth/bluetoothd
869 root 0:01 {firewalld} /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
871 root 0:32 /usr/libexec/accounts-daemon
873 rtkit 0:05 /usr/libexec/rtkit-daemon
875 root 0:00 /usr/sbin/ModemManager
876 avahi 0:03 avahi-daemon: running [dufresne.local]
878 root 0:54 /usr/sbin/irqbalance --foreground
884 root 0:00 /usr/sbin/smartd -n -q never
886 avahi 0:00 avahi-daemon: chroot helper
891 chrony 0:01 /usr/sbin/chronyd
892 root 0:01 /usr/lib/systemd/systemd-logind
893 dbus 1:28 /bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
Вы также можете посмотреть на файл CMDLINE
файл, что каждый PID имеет в / proc /
.
$ cat /proc/28865/cmdline
bash-csleep 10000; while [ 1 ];do echo hi;sleep 10;done
Но обратите внимание, что не хватает расстояния. Это связано с символом Nul, используемым в этом файле, чтобы отделить аргументы вашей командной строки. Не беспокойтесь, хотя эти могут быть выделены.
$ tr '\0' ' ' </proc/28865/cmdline
bash -c sleep 10000; while [ 1 ];do echo hi;sleep 10;done
Если вам нравятся короткие команды и доступен pgrep, я бы посоветовал pgrep -fl <process_name>
.
ps -o args
усекается
Облегченная версия команды ps
(BusyBox):
PROCNAME="udhcpc"
CMD=$(ps | grep $PROCNAME | grep -v grep | head -n 1 | grep -o '/.*$')
Полная -версия команды ps
:
PROCNAME="udhcpc"
CMD=$(ps -f --no-headers -C $PROCNAME | head -n 1 | grep -o '/.*$')
Или их комбинация. Поскольку ps
в BusyBox не имеет аргумента для определения версии (, он выдаст ошибку выхода ), мы можем воспользоваться этим:
PROCNAME="udhcpc"
if ps --version; then
CMD=$(ps -f --no-headers -C $PROCNAME | head -n 1 | grep -o '/.*$') # full-featured "ps" command
else
CMD=$(ps | grep $PROCNAME | grep -v grep | head -n 1 | grep -o '/.*$') # "ps" command from BusyBox
fi
Если вам нужны только аргументы после имени процесса, разделите строку после первого пробела, например:
echo $CMD | cut -d ' ' -f 2-99