Как проверить, как долго процесс или pid был запущен на моем сервере Ubuntu/Debian или CentOS Linux?
Вам нужно использовать команду ps для просмотра информации о некоторых активных процессах. Команда pid предоставляет следующие два варианта форматирования PID (идентификационный номер процесса). PID автоматически присваивается при создании процесса в Linux или Unix-подобной операционной системе.
Команда Linux ps для поиска параметров времени выполнения процесса
- etime Отображение времени, прошедшего с момента запуска процесса, в форме [[ДД-]чч:]мм:сс.
- etimes Отображение времени, прошедшего с момента запуска процесса, в секундах.
Как проверить, как долго выполняется процесс?
Вам нужно передать команде ps параметр -o etimes или -o etime. Синтаксис следующий:
1 2 | ps -p [PID] -o etime ps -p [PID] -o etimes |
Команда ps используется для получения информации о текущих запущенных процессах в Linux, включая их идентификационные номера процессов (PID) и другую информацию. Мы можем использовать и другие команды. Например, команду pstree, команду top, команду htop и другие. Давайте рассмотрим примеры, чтобы узнать, как долго процесс OpenVPN был запущен на моем сервере.
Шаг 1: Найти PID процесса (например, httpd)
Откройте интерпретатор shell и введите следующую команду pidof:
1 | pidof httpd |
Шаг 2: Как долго выполняется процесс httpd?
1 | ps -p 1457979 -o etime |
ИЛИ
1 | ps -p 1457979 -o etimes |
Чтобы скрыть заголовок:
1 2 | ps -p 1457979 -o etime= ps -p 1457979 -o etimes= |
1457979 - это PID процесса, который вы хотите проверить. В данном случае я проверяю процесс httpd. Не стесняйтесь заменить httpd и PID #1457979 в соответствии с вашими требованиями. В этом примере я вывожу PID, команду, прошедшее время, ID пользователя и ID группы:
1 | ps -p 1457979 -o pid,cmd,etime,uid,gid |
Образец вывода:
Во многих производственных системах непривилегированным пользователям или разработчикам не разрешается просматривать информацию, связанную с процессами, по соображениям безопасности. В таких случаях необходимо запускать ps от имени пользователя root либо с помощью команды su, либо с помощью команды sudo.
Как узнать, как долго выполняется процесс с именем в Linux
Найдите идентификатор процесса с помощью команды ps или команды pidof:
1 | sudo pidof [имя процесса] |
льтернативно, используйте команду grep в качестве фильтра
1 | sudo ps aux | grep '/usr/sbin/[имя процесса]' |
Теперь, когда у вас есть PID для mysqld, давайте найдем и выведем дату создания PID. Другими словами, узнайте, когда процесс был запущен в Linux, введите:
1 2 | sudo ps -p [PID] -o start,etimes,etime sudo ps -p [PID] -o pid,cmd,start,etimes,etime |
Наш последний пример позволяет непосредственно найти PID по имени процесса, например, lighttpd, nginx, mysqld и так далее:
1 2 3 4 | sudo ps -C [имя процесса] -o pid,cmd,start,etimes,etime sudo ps -C lighttpd -o pid,cmd,start,etimes,etime sudo ps -C nginx -o pid,cmd,start,etimes,etime sudo ps -C mysqld -o pid,cmd,start,etimes,etime |
Множество процессов или PID означает, что вы запускаете один и тот же процесс с помощью Docker/LXD или контейнеров Linux. Одни и те же демоны (долго работающие фоновые процессы), такие как Nginx, используют модель процессов "родитель-ребенок", поэтому вы можете увидеть много PID. Например, вот результаты с сервера, на котором запущено несколько Linux-контейнеров с главным процессом php-fpm в каждом контейнере:
1 | sudo ps -C php-fpm -o pid,cmd,lstart,etime,etimes |
Мой PID 1472305 (главный процесс php-fpm) был запущен "Mon Mar 20 11:22:18 2023" и 27681 секунды назад.
Понимание опций ps
С помощью ps в Linux можно узнать, как долго выполняется процесс:
Параметр | Описание | Пример |
-C | Выбор процесса по имени команды вместо PID | ps -C firefox |
ps -C memcached | ||
ps -C redis-server | ||
-o pid | Число, представляющее идентификатор процесса | ps -C nginx -o pid |
ps -p PID_HERE -o pid | ||
-o cmd | Команда со всеми ее аргументами в виде строки | ps -C google-chrome -o cmd |
-o start | Время запуска команды. Если процесс был запущен менее 24 часов назад, выходной формат - "HH:MM:SS", иначе - " Mmm dd" (где Mmm - трехбуквенное название месяца). | ps -C mysqld -o start |
-o lstart | Найти время запуска фоновой команды | ps -C lighttpd -o lstart |
-o etimes | Получить истекшее время с момента запуска процесса, в секундах | ps -C php-fpm7 -o etimes |
-o etime | Посмотреть прошедшее время с момента запуска процесса в форме [[ДД-]чч:]мм:сс | ps -C php-fpm7 -o etime |
-o etime= | Скрыть заголовок команды ps | |
-o cmd= | ||
-o $opt= |
Заключение
В этом руководстве вы узнали, как определить идентификаторы процессов (PID) в системах Linux, а затем определить, как долго они работают на вашей машине или облачном сервере. Ознакомьтесь с man-страницей команды ps, набрав следующую команду man, или прочитайте ее онлайн здесь. Например:
1 | man ps |
В ps также можно передать опцию --help:
1 | ps --help |