Как использовать модификатор S-output с командой Unix / Linux ps? - PullRequest
1 голос
/ 14 августа 2011

Команда

ps -o time -p 21361

работает; однако мне нужно время выполнения процесса, включая все дети . Например, если 21361 является сценарием bash, который вызывает другие сценарии, тогда я хочу общее время пробега, включая время пробега всех детей.

Теперь в документации ps указан «ИЗМЕНИТЕЛЬ ВЫХОДА»:

S

Sum up some information, such as CPU usage, from dead child processes into their parent. This is useful for examining a system where a parent process repeatedly forks off short-lived children to do work.

Звучит как раз. К сожалению, нет спецификации синтаксиса PS, поэтому Я понятия не имею, где разместить "S"! Я часами пробовал много комбинаций, но или я получаю синтаксические ошибки, или "S" ничего не делает. И в интернете вы найдете только очень основная информация о PS (и всегда то же самое), в частности, модификатор "S" Я нигде не мог найти упомянутое, а также никто никогда не объясняет синтаксис пс.

Ответы [ 2 ]

2 голосов
/ 14 августа 2011

Я не уверен, но, возможно, в этом отношении ps несколько глючит. Попробуйте это здесь:

$ ps p 12104 k time
PID TTY      STAT   TIME COMMAND
12104 ?        Ss    16:17 /usr/sbin/apache2 -k start

$ ps p 12104 k time S
PID TTY      STAT   TIME COMMAND
12104 ?        Ss   143:16 /usr/sbin/apache2 -k start

Это использует опции BSD для PS. Это работает на моем компьютере, однако вы получаете дополнительную строку заголовка и дополнительные столбцы. Я бы вырезал их, используя tr и cut:

$ ps p 12104 k time S | tail -n 1 | tr -s '[:space:]' | cut -d ' ' -f 4
143:39
$ ps p 12104 k time | tail -n 1 | tr -s '[:space:]' | cut -d ' ' -f 4
16:17
0 голосов
/ 14 августа 2011

На MacOS X (10.7, Lion) на странице руководства написано:

-S Измените способ расчета времени процесса путем суммирования всех вышедших потомков в родительский процесс.

Итак, я смог получить вывод, используя:

$ ps -S -o time,etime,pid -p 305
     TIME     ELAPSED   PID
  0:00.12 01-18:31:07   305
$

Однако этот вывод на самом деле не отличался от того, когда опция '-S' была опущена.

Я пытался:

$ ps -S -o time,etime,pid -p 305
     TIME     ELAPSED   PID
  0:00.14 01-18:43:59   305
$ time dd if=/dev/zero of=/dev/null bs=1m count=100k
102400+0 records in
102400+0 records out
107374182400 bytes transferred in 15.374440 secs (6983941055 bytes/sec)

real    0m15.379s
user    0m0.056s
sys     0m15.034s
$ ps -S -o time,etime,pid -p 305
     TIME     ELAPSED   PID
  0:00.14 01-18:44:15   305
$

Как видите, 15 секунд системного времени, потраченного на копирование /dev/zero в /dev/null, не включены в сводку.

На данном этапе единственный способ выяснить, что делает опция '-S', во всяком случае, это посмотреть на источник. Вы можете найти sumrusage в версии FreeBSD, например, FreeBSD .

...