Сотня процессов работает без тебя. В этом шаге — откуда они берутся и как найти среди них нужные по имени.
Процессы своего терминала ты уже видел в ps: оболочку bash и сам ps, у каждого номер и учётная запись. Остальные процессы машины запустил при загрузке systemd, а следом — службы и другие учётные записи. Номер процесса называют PID: он выдаётся при запуске, а после завершения процесса его может получить другой.
Одна программа может работать в нескольких процессах сразу, у каждого свой PID. Поэтому имя программы ещё не называет процесс: indexer на этой машине не один.
pgrep с ключом -l печатает PID и имя каждого процесса, в имени которого есть заданное слово:
На машине с первого шага строк три — три процесса одной программы. Какой из них занимает процессор, pgrep не скажет: это видно в top, а подробности о каждом процессе печатает ps.
pgrep -l indexer напечатал три строки. Ты завершишь процесс с номером из первой строки. Что станет с двумя другими?
-
Программа одна, а процессы независимые. Сигнал по номеру получает один процесс —
pgrep -l indexerпосле этого напечатает две строки. -
Файл программы лежит на диске отдельно от процессов, и завершение процесса его не трогает.
ls -l /usr/local/bin/indexerпокажет файл на месте. -
Номер выдаётся процессу при запуске и у работающего не меняется.
pgrep -l indexerпокажет у двух оставшихся прежние PID.
Процессы одной программы независимы: у каждого свой PID, память и состояние. Завершение одного не трогает ни другие процессы, ни файл программы на диске.
Главное в шаге
- Процессы машины запускают systemd, службы и другие учётные записи; у каждого свой PID и владелец.
- Одна программа работает в нескольких процессах, освободившийся PID позже получает другой процесс.
-
pgrep -l словопечатает PID и имя процессов с этим словом в имени.