Intereting Posts
Получить системное уведомление в определенное время? X эквивалент ключа прозрачности Windows Гость Arch Linux (VirtualBox): невозможно настроить X Получение сообщения об ошибке «NTFS5: no ang0» при загрузке Linux Mint Как рассчитать параметры для `iw set freq` Не работает Pinguy 11.04 возможно ли увеличить уровень резервирования журнала xorg в ubuntu? Что возвращает cut, если указанное поле не существует? Хранение вывода скрипта оболочки переменной Разница между эхом и печатью в оболочке Korn Изменение конфигурационных файлов с помощью awk / sed Как проверить, сколько свободного места осталось на устройстве для создания раздела Любые идеи для упрощения выражения неудобного rsync ниже? Я просто «mv» создал 49-гигабайтный каталог для плохого пути к файлу, возможно ли восстановить исходное состояние файлов? Понимание нескольких сетевых интерфейсов и маршрутизации с использованием OpenWRT

PS: получить краткое имя команды и истекшее время

Я в системе Debian 8 пытаюсь определить процессы и их соответствующие среды выполнения определенного пользователя:

$ ps -u  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  php-fpm: pool  00:36 php-fpm: pool  00:36 php-fpm: pool  00:24 php-fpm: pool  00:18 php-fpm: pool  00:04 python3 /usr/local/bin/fixw 17:39:44 

Однако я хочу иметь короткие имена процессов php-fpm как в первом выводе, а не длинные имена второго. Я не мог найти пути к этому, читая ps страницу ps .
Как я могу получить CMD выхода # 1 с истекшим временем выхода # 2?

Решение @ СтивенКитт ответил недостающим намеком. Однако мне нужно было немного его изменить. Странный вывод:

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

Отдельные варианты работы:

 $ ps -o comm= -o etime= -u  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 

Несмотря на имя столбца, вывод, который вы ищете – это comm а не cmd :

 ps -o comm= -o etime= -u  

cmd является нестандартным псевдонимом для args и показывает команду со всеми ее аргументами, включая любые изменения, внесенные процессом.

comm – это имя процесса, которое в Linux по умолчанию является первыми 15 байтами базового имени последнего файла, который был выполнен процессом (или совпадает с именем его родительского процесса, если он не выполнил какой-либо файл, или именем задачи для задач ядра), и может быть изменено с помощью PR_SET_NAME prctl() .

Обратите внимание, что etime – это время, etime момента etime процесса, и процесс может (и часто выполняет) более одной команды за время жизни, поэтому если вы видите cmd 00:03 , это не обязательно означает, что cmd был Запустив в течение 3 секунд, процесс, который в данный момент выполняет cmd вполне мог запустить какую-то другую команду раньше.

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

Процесс, выполняющий ps ранее выполнял sh течение которого он проводил большую часть времени в ожидании другого процесса, выполняющего sleep (после очень короткого запуска sh ).