Как да използвате командата ps за наблюдение на процесите в Linux

Вземете моментна снимка на процесите, изпълнявани във вашия Linux компютър с командата ps. Намерете процеси по име, потребител или дори терминал с толкова много или толкова малко подробности, колкото са ви необходими. Ние ви показваме как.

Управление на процеси в Linux

Биещото сърце на всички Linux и Unix-подобни операционни системи е ядрото. Сред многото му отговорности е разпределението на системни ресурси като RAM и CPU време. Те трябва да се манипулират в реално време, така че всички работещи процеси да получат справедлив дял, според приоритета на всяка задача.

Понякога задачите могат да се блокират, да влязат в тесен цикъл или да не реагират по други причини. Или може да продължат да работят, но поглъщат твърде много процесорно време или RAM, или да се държат по някакъв също толкова антисоциален начин. Понякога задачите трябва да бъдат убити като милост към всички участващи. Първата стъпка. Разбира се, е да се идентифицира въпросният процес.

Но може би изобщо нямате проблеми със задача или производителност. Може би просто сте любопитни кои процеси се изпълняват във вашия компютър и бихте искали да надникнете под капака. Командата ps удовлетворява и двете нужди. Дава ти моментна снимка на случващото се във вашия компютър „точно сега.“

ps е достатъчно гъвкав, за да ви даде точно информацията, от която се нуждаете, точно във формат, който искате. Всъщност ps има много опции. Опциите, описани тук, ще се погрижат за повечето обичайни нужди. Ако трябва да навлезете по-дълбоко в ps, отколкото сме го взели в тази статия, ще откриете, че нашето въведение прави man страницата по-лесна за смилане.

Процеси на листване

Най-лесният начин да използвате ps е да го задействате без параметри:

ps

ps показва списък на процесите, стартирани от потребителя, който е изпълнил командата.

Четирите колони са:

PID: Идентификационният номер на процеса на процеса.
TTY: Името на конзолата, в която е влязъл потребителят.
ВРЕМЕ: Количеството време за обработка на процесора, което процесът е използвал.
CMD: Името на командата, която стартира процеса

Процес на листване за всички потребители

чрез добавяне на -e (изберете всички процеси) можем да направим ps списък на процесите, които са били стартирани от всички потребители, а не само от потребителя, който изпълнява командата ps. Тъй като това ще бъде дълъг списък, ние го прехвърляме в по-малко.

ps -e | less

Списъкът с процеси се прехвърля в по-малко.

  Как да използвате FTP от командния ред на Linux

Имаме много повече записи в списъка, но виждаме същите четири колони, както преди. Записите с въпросителен знак? в колоната TTY не са стартирани от прозорец на терминала.

Показване на йерархия на процесите

Понякога може да ви помогне да разберете проблем или да идентифицирате конкретен процес, ако можете да видите кои процеси са стартирали други процеси. Ние използваме опцията -H (йерархия), за да го направим.

ps -eH | less

Отстъпът показва кои процеси са родители на кои други процеси.

За да добавим малко повече яснота, можем да помолим ps да добави малко ASCII линии и да начертаете йерархията като дърво. Опцията да направите това е опцията –forest.

ps -eH --forest | less

Това улеснява проследяването кои процеси са родители на други процеси.

Изброяване на процеси по име

Можете да предавате изхода от ps през grep към записи в списъка които имат имена, които съответстват на думата за търсене. Тук търсим записи, които съответстват на думата за търсене „firefox“:

ps -e | grep firefox

В този случай изходът е един запис за процеса, който ни интересува. Разбира се, ако бяхме стартирали няколко екземпляра на Firefox, щеше да има повече от един елемент, върнат в списъка.

Показване на още колони в изхода

За да добавите още колони към изхода, използвайте опцията -f (пълен формат).

ps -ef | less

Допълнителен набор от колони е включен в изхода от ps.

Колоните са:

UID: Потребителският идентификатор на собственика на този процес.
PID: Идентификаторът на процеса на процеса.
PPID: ID на родителския процес на процеса.
C: Броят деца, които процесът има.
ВРЕМЕ: Начален час. Моментът, в който процесът е започнал.
TTY: Името на конзолата, в която е влязъл потребителят.
ВРЕМЕ: Количеството време за обработка на процесора, което процесът е използвал.
CMD: Името на командата, която стартира процеса.

С помощта на опцията -F (допълнителен пълен формат) можем да получим още повече колони:

ps -eF | less

Колоните, които получаваме този път, изискват екранът да бъде превъртан настрани, за да се разкрият всички.

Натискането на клавиша „Стрелка надясно“ измества дисплея наляво.

Колоните, които получаваме сега са:

UID: Потребителският идентификатор на собственика на този процес.
PID: Идентификаторът на процеса на процеса.
PPID: ID на родителския процес на процеса.
C: Броят деца, които процесът има.
SZ: Размер в RAM страници на изображението на процеса.
RSS: Постоянен размер на набора. Това е неразменената физическа памет, използвана от процеса.
PSR: Процесорът, към който е назначен процесът.
ВРЕМЕ: Начален час. Моментът, в който процесът е започнал.
TTY: Името на конзолата, в която е влязъл потребителят.
ВРЕМЕ: Количеството време за обработка на процесора, което процесът е използвал.
CMD: Името на командата, която стартира процеса.

  Как да инсталирате Linux на Mac

Изброяване на процеси по идентификатор на процес

След като намерите идентификатора на процеса за процеса, който ви интересува, можете да го използвате с командата ps, за да изброите подробностите за този процес. Използвайте опцията -p (избиране по ID на процес), за да постигнете това:

ps -p 3403

Подробностите за този процес са изброени:

Не сте ограничени до един идентификатор на процес. Можете да предоставите списък с идентификатори на процеси, разделени с интервали.

Изброяване на процеси по команда

Опцията -C (команда) ви позволява да търсите процес, използвайки името на командата. Тоест името на командата, която стартира процеса. Това е малко по-различно от командния ред, който може да включва имена на пътища и параметри или опции.

ps -C shutter

Подробностите за процеса на затвора са изброени.

Изброяване на процеси, собственост на потребител

За да видите процесите, които са собственост на конкретен потребител, използвайте опцията -u (списък с потребители):

ps -u mary

Показват се процесите, притежавани от потребителския акаунт mary.

Изброяване на процеси по терминал

За да видите процесите, свързани с TTY, използвайте опцията -t (избиране от TTY). Използвана без TTY номер, опцията -t отчита процеси, свързани с текущия прозорец на терминала.

tty
ps -t

Командата tty съобщава, че това е псевдо-телетип 0. Всички процеси, изброени от ps -t, са свързани с TTY pts/0.

Ако предадем TTY номер в командния ред, трябва да получим отчет за процесите, свързани с този TTY.

ps -t 1

Този път всички процеси са свързани с TTY pts/1.

Избиране на колони за показване

С опцията -o (формат) можете да изберете кои колони искате да включите в изхода от ps. Посочвате колоните по име. (Дългият) списък с имена на колони може да се види на man страница в раздела, озаглавен „Стандартни спецификатори на формат“. В този пример избираме процесорното време (pcpu) и командния ред с аргументи (args) да бъдат включени в изхода.

ps -e -o pcpu,args | less

Резултатът включва само нашите две заявени колони.

Сортиране на изхода по колони

Можете да сортирате изхода вместо вас, като използвате опцията –sort. Нека сортираме изхода по колоната на процесора:

ps -e -o pcpu,args --sort -pcpu| less

Тирето “-” в параметъра за сортиране на pcpu дава низходящ ред на сортиране.

За да видите десетте най-интензивни процесора, прокарайте изхода през главата команда:

ps -e -o pcpu,args --sort -pcpu | head -10

Получаваме сортиран, съкратен списък.

Ако добавим още колони към нашия дисплей, можем да сортираме по повече колони. Нека добавим колоната pmem. Това е процентът от паметта на компютъра, който се използва от процеса. Без тире или с плюс ” +“, редът на сортиране е възходящ.

ps -e -o pcpu,pmem,args --sort -pcpu,pmem | head -10

Получаваме нашата допълнителна колона и новата колона е включена в сортирането. Първата колона е сортирана преди втората колона, а втората колона е сортирана във възходящ ред, защото не сме поставили тире в pmem.

  Как да клонирате вашата инсталация на Linux с Clonezilla

Нека да го направим малко по-полезен и да добавим колоната с идентификатор на процеса (pid), за да можем да видим номера на процеса на всеки процес в нашия списък.

ps -e -o pid,pcpu,pmem,args --sort -pcpu,pmem | head -10

Сега можем да идентифицираме процесите.

Убиване на процеси чрез ID на процес

Обхванахме редица начини за идентифициране на процеси, включително име, команда, потребител и терминал. Ние също така разгледахме начини за идентифициране на процесите по техните динамични атрибути, като използване на процесора и памет.

Така че, по един или друг начин, можем да идентифицираме процесите, които се изпълняват. Като знаем техния идентификатор на процеса, можем (ако трябва) да убием всеки от тези процеси с помощта на командата kill. Ако искаме да убием процес 898, бихме използвали този формат:

sudo kill 898

Ако всичко върви добре, процесът се прекратява безшумно.

Убиване на процеси по име

Командата pkill ви позволява да убиване на процеси по име. Уверете се, че сте идентифицирали правилния процес! Тази команда ще прекрати горния процес.

sudo pkill top

Отново няма новини е добра новина. Процесът се прекратява безшумно.

Убиване на множество процеси по име

Ако имате няколко изпълнявани копия на процес или процесът е породил редица дъщерни процеси (както Google Chrome може да направи), как можете да ги унищожите? Това е също толкова лесно. Използваме командата killall.

Имаме две копия на най-добре работещите:

ps -e | grep top

Можем да прекратим и двамата с тази команда:

sudo killall top

Липсата на отговор означава, че няма проблеми, така че и двата процеса са прекратени.

Вземете динамичен изглед с горната част

Резултатът от ps е изглед на моментна снимка. Не се актуализира. За да получите актуализиран изглед на процесите, използвайте командата top. Той осигурява а динамичен изглед на процесите, изпълнявани във вашия компютър. Дисплеят е от две части. В горната част на екрана има зона за табло, съставена от редове с текст, и таблица в долната част на екрана, съставена от колони.

Започнете отгоре с тази команда:

top

Колоните съдържат информация за процесите:

PID: ID на процеса
ПОТРЕБИТЕЛ: Име на собственика на процеса
PR: Приоритет на процеса
NI: Хубавата стойност на процеса
VIRT: Виртуална памет, използвана от процеса
RES: Постоянна памет, използвана от процеса
SHR: Споделена памет, използвана от процеса
S: Състояние на процеса. Вижте списъка по-долу със стойностите, които това поле може да приеме
%CPU: делът на времето на процесора, използвано от процеса след последната актуализация
%MEM: използван дял от физическата памет
TIME+: общото време на процесора, използвано от задачата в стотни от секундата
КОМАНД: име на команда или команден ред (име и параметри на командния ред) Ако командната колона не се вижда, натиснете клавиша „Стрелка надясно“.

Състоянието на процеса може да бъде едно от:

D: Непрекъсваем сън
Р: Бягане
П: Спя
T: проследено (спряно)
Z: Зомби

Натиснете клавиша „Q“, за да излезете отгоре.

Преди да убиете процес

Уверете се, че това е този, който търсите, и проверете дали няма да ви създаде проблеми. По-специално, струва си да проверите с опциите -H (йерархия) и –forest, за да се уверите, че няма важни дъщерни процеси, за които сте забравили.