Я хочу получить время выполнения некоторых процессов. Вот что я делаю
ps -ef | grep "python3 myTask.py" | awk '{print $2}' | xargs -n1 ps -p {} -o etime
Я хочу получить pids от
ps -ef | grep "python3 myTask.py" | awk '{print $2}'
затем передайте их
ps -p {} -o etime
с помощью xargs, но это не работает. я получил
error: process ID list syntax error
Usage:
ps [options]
Try 'ps --help <simple|list|output|threads|misc|all>'
or 'ps --help <s|l|o|t|m|a>'
for additional help text.
For more details see ps(1).
error: process ID list syntax error
Usage:
ps [options]
Try 'ps --help <simple|list|output|threads|misc|all>'
or 'ps --help <s|l|o|t|m|a>'
for additional help text.
For more details see ps(1).
Что я делаю не так?
Но тем не менее, вы должны указать -I{}
; в противном случае вы не можете использовать заполнитель
Вы должны указать -I{}
для xargs, чтобы установить заполнитель; в противном случае его нельзя использовать.
Тем не менее, ваша команда слишком сложна и включает в себя слишком много промежуточных шагов (и условия гонки). Просто получите свои процессы, включая прошедшее время, и отфильтруйте нужные строки:
ps -eo etime,cmd | awk '/python3 myTask.py/{print $1}'
(больше нет xargs
)
Вы можете использовать следующую команду:
pgrep -f "python3 myTask.py" | xargs -i{} ps -p {} -o etime
pgrep
- Поиск или сигнализация процессов на основе имени и других атрибутов.
-f, --full
-
Шаблон обычно сопоставляется только с именем процесса. При установке -f отображается полная командная строка.
использовал.
Для дальнейшего чтения см. man pgrep
.
Отсутствующей частью сегмента xargs
была -i{}
, которая вызывает команду для каждого аргумента, а {} будет заменена ею.
-i[replace-str], --replace[=replace-str]
-
Этот параметр является синонимом параметра -Ireplace-str, если указан параметр replace-str.
Для дальнейшего чтения см. man xargs
.
Почему бы вам не добавить столбец для вашего первого вызова
ps
, а затем grep/awk вашего процесса (можно объединить в один вызовawk
)?