dr.Brain

doctor Brain

мир глазами веб-разработчика

Командная строка: ps

просматриваем список процессов с помощью ps

dr.Brain

время чтения 3 мин.

Photo by Thibaut Nagorny on Unsplash

Во время своей работы любой компьютер запускает множество процессов, просмотреть список которых можно с помощью команды ps.

Для начала определимся, что такое процесс?

Процесс - это запущенный экземпляр программы.

В пределах одной системы пользователи могут запускать одинаковые программы. Кроме того, даже один пользователь в разных ситуациях может запускать несколько экземпляров одной и той же программы. Таким образом, в системе может существовать множество однотипных процессов, различить которые можно с помощью присваиваемого в момент запуска уникального идентификатора PID (Process Identifier).

Синтаксис команды ps предельно прост:

ps

Таким образом, можно получить список процессов запущенных текущим пользователем в текущей терминальной сессии:

~ % ps
  PID TTY           TIME CMD
 1938 ttys000    0:00.07 -zsh
  623 ttys004    0:00.05 -zsh
 1943 ttys004    0:47.25 hugo server -D

В примере, приведенном выше, у пользователя есть два процесса терминальной оболочки zsh и один процесс сервера генератора статических страниц hugo.

Но, так можно увидеть только собственные процессы. Использование опций предоставляет команде ps намного больше возможностей.

Чаще всего применяется сочетание опций ax. Где опция a нужна для вывода списка процессов других пользователей, а опция x позволяет вывести процессы, не привязанные к какому-либо терминалу (то есть процессы, которые не были запущены пользователями в терминальных сессиях).

~ % ps ax
  PID   TT  STAT      TIME COMMAND
    1   ??  Ss     2:17.04 /sbin/launchd
  119   ??  Ss     0:02.15 /usr/sbin/syslogd
  120   ??  Ss     0:02.68 /usr/libexec/UserEventAgent (System)
  123   ??  Ss     0:01.54 /System/Library/PrivateFrameworks/Uninstall.framework/Resourc
  124   ??  Ss     0:07.91 /usr/libexec/kextd
  125   ??  Ss     1:46.55 /System/Library/Frameworks/CoreServices.framework/Versions/A/
  126   ??  Ss     0:00.08 /Library/Frameworks/OVPNHelper.framework/Versions/Current/usr
  127   ??  Ss     0:00.56 /System/Library/PrivateFrameworks/MediaRemote.framework/Suppo
  130   ??  Ss     0:00.08 /Library/Frameworks/OpenVPNConnect.framework/Versions/Current
  131   ??  Ss     0:21.98 /usr/sbin/systemstats --daemon
  132   ??  Ss     0:04.60 /usr/libexec/configd
  133   ??  Ss     0:00.08 endpointsecurityd
  134   ??  Ss     0:10.43 /System/Library/CoreServices/powerd.bundle/powerd
  136   ??  Ss     0:00.05 nginx: master process /usr/local/opt/nginx/bin/nginx -g daemo
  139   ??  Ss     0:10.87 /usr/libexec/logd
  140   ??  Ss     0:00.16 /usr/libexec/keybagd -t 15

Как видно из полученного результата, длинные строки списка выводятся обрезанными. Чтобы избежать этого пригодятся еще и опции ww:

~ % ps axww  
  679   ??  S      0:00.62 /Users/george75/Library/Application Support/Figma/FigmaAgent.app/Contents/MacOS/figma_agent -psn_0_196656
  681   ??  S      0:08.22 /Applications/Figma.app/Contents/Frameworks/Figma Helper.app/Contents/MacOS/Figma Helper --type=utility --utility-sub-type=network.mojom.NetworkService --field-trial-handle=1718379636,15163398383114259674,12962946262237565502,131072 --enable-features=WebComponentsV0Enabled --disable-features=CookiesWithoutSameSiteMustBeSecure,SameSiteByDefaultCookies,SpareRendererForSitePerProcess --lang=en-US --service-sandbox-type=network --standard-schemes --secure-schemes=desktop-file --bypasscsp-schemes --cors-schemes --fetch-schemes=desktop-file --service-worker-schemes --shared-files --seatbelt-client=42
  682   ??  S      0:00.04 /System/Library/PrivateFrameworks/CommunicationsFilter.framework/CMFSyncAgent

Утилита ядра grep в сочетании с командой ps позволяет выводить список процессов в соответствии с поставленными задачами:

~ % ps axww | grep "hugo server"
 3007 s000  S+     0:00.00 grep hugo server
 1943 s004  S+     0:55.58 hugo server -D

Список процессов выводится в нескольких столбцах:

  1. PID указывает на ID процесса,
  2. TT указывает на ID терминальной сессии,
  3. STAT показывает статус процесса,
  4. TIME показывает время существования прцоесса,
  5. COMMAND демонстрирует непосредственно саму запущенную команду.

Если говорить о статусах процессов STAT, то они могут соответствовать одному из четырех значений:

  1. I является простаивающим процессом (не работает более 20 секунд),
  2. R является запущенным процесс,
  3. S является процессом спящим менее 20 секунд,
  4. T является остановленным процессом,
  5. U является процессом в непрерывном ожидании,
  6. Z является процессом-зомби (мертвый процесс).

Значок + в столбце STAT указывает на лидирующий процесс, то есть процесс выполняемый на переднем плане.


Спасибо за внимание.

Новые публикации

Далее

Категории

О нас

Frontend & Backend. Статьи, обзоры, заметки, код, уроки.