Назад | Перейти на главную страницу

Как получить только идентификаторы всех запущенных процессов?

я знаю это

ps ax

возвращает pid

1 ?        Ss     0:01 /sbin/init
2 ?        S<     0:00 [kthreadd]
3 ?        S<     0:00 [migration/0]

Все, что мне нужно, это очистить эти строки, но я не мог этого сделать с помощью sed, потому что не мог написать правильное регулярное выражение. Не могли бы вы помочь мне?

Использовать форматирование вывода ps:

ps -A -o pid

Форматирование вывода команды - лучший вариант. Параметр o управляет форматированием вывода. Я перечислил некоторые из аргументов ниже, остальные см. 'Man ps' (чтобы использовать несколько, было бы -o pid,cmd,flags).

KEY   LONG         DESCRIPTION
   c     cmd          simple name of executable
   C     pcpu         cpu utilization
   f     flags        flags as in long format F field
   g     pgrp         process group ID
   G     tpgid        controlling tty process group ID
   j     cutime       cumulative user time
   J     cstime       cumulative system time
   k     utime        user time
   o     session      session ID
   p     pid          process ID

Awk or Cut было бы лучше, чтобы получить столбцы:
Как правило, вам не нужно, чтобы регулярное выражение для выбора первого столбца, вы хотели бы направить его для вырезания или awk, чтобы вырезать первый столбец, например:

ps ax | awk '{print $1}'

Regex - это вариант, если не лучший:
Если бы вы использовали регулярное выражение, это могло бы быть что-то вроде:

ps ax | perl -nle 'print $1 if /^ *([0-9]+)/'

$ 1 печатает только то, что указано в скобках. ^ привязывает к началу строки. Пробел звездочка означает, что перед числом разрешены необязательные пробелы. [0-9] + означает одну или несколько цифр. Но я бы не рекомендовал регулярное выражение для этой конкретной задачи, понимаете, почему? :-)

ps ax | awk '{ print $1; }'

Использовать переключиться на вывод в формате cust

ps -o pid

Плохой способ использования sed, как вы явно просили, может быть

ps -ax | sed 's#^\( *[0-9]\+\) .*$#\1#'

ps -eo pid или пс -eo% p

-e Выбрать весь процесс -o Форматировать pid = идентификатор процесса% p sameas pid