ps: 짧은 명령 이름 및 실행 시간 가져오기

ps: 짧은 명령 이름 및 실행 시간 가져오기

Debian 8 시스템에서 특정 사용자의 프로세스와 해당 런타임을 확인하려고 합니다.

$ ps -u <user>
  PID TTY          TIME CMD
26038 ?        00:00:00 php5-fpm
26052 ?        00:00:00 php5-fpm
26950 ?        00:00:00 php5-fpm
27344 ?        00:00:00 php5-fpm
28292 ?        00:00:00 php5-fpm
28691 ?        01:54:21 python3 /usr/lo
$ which ps  # ps is not aliased or so.
/bin/ps

지금 나는또한각 프로세스에 소요되는 시간을 원합니다. 그래서 나는 다음을 시도한다:

$ ps -o cmd=,etime= -u <user>
php-fpm: pool <user>         00:36
php-fpm: pool <user>         00:36
php-fpm: pool <user>         00:24
php-fpm: pool <user>         00:18
php-fpm: pool <user>         00:04
python3 /usr/local/bin/fixw    17:39:44

php-fpm그러나 두 번째 출력에서는 긴 이름이 아니라 첫 번째 출력에서는 짧은 프로세스 이름을 원합니다 . 이 작업을 수행할 수 있는 방법이 없습니다. ps매뉴얼 페이지를 읽어보세요.
출력 #1의 CMD와 출력 #2의 경과 시간을 어떻게 얻나요?

해결책 @StephenKitt의 답변은 힌트가 누락되었습니다. 그러나 약간 수정해야 합니다. 이상한 출력:

$ ps -o comm=,etime= -u <user>
,etime=
php5-fpm
php5-fpm
php5-fpm
php5-fpm
php5-fpm
ps
python3 /usr/lo

개별 옵션 작동:

$ ps -o comm= -o etime= -u <user>
php5-fpm              00:55
php5-fpm              00:27
php5-fpm              00:24
php5-fpm              00:13
php5-fpm              00:08
python3 /usr/lo    17:49:38

답변1

열 이름에도 불구하고 찾고 있는 출력은 comm다음과 같습니다 cmd.

ps -o comm= -o etime= -u <user>

cmdargs프로세스에 의한 수정 사항을 포함하여 명령과 모든 인수를 표시하는 비표준 별칭입니다 .

comm~이다프로세스 이름Linux에서 이는 프로세스에 의해 실행된 마지막 파일의 기본 이름(또는 파일이 실행되지 않은 경우 상위 프로세스와 동일한 이름 또는 커널 작업의 작업 이름)의 처음 15바이트가 기본값이며 다음과 같을 수 있습니다. 으로 수정되었습니다 PR_SET_NAME prctl().

이는 etime프로세스가 생성된 이후의 시간이며 프로세스는 수명 동안 여러 명령을 실행할 수 있으며 종종 실행합니다. 따라서 이 내용이 표시된다고 해서 반드시 3초 동안 실행되었다는 cmd 00:03의미는 아닙니다 . cmd현재 실행 중인 프로세스는 cmd이전에 다른 명령을 실행했을 가능성이 높습니다.

$ sh -c 'sleep 3; exec ps -o comm= -o etime='
zsh                   13:48
ps                    00:03

실행 중인 프로세스는 ps이전에 실행 중이었으며 sh, 그 동안 다른 프로세스가 실행될 때까지 기다리는 데 대부분의 시간을 소비했습니다 sleep( sh짧은 시간 동안 실행한 후).

관련 정보