Какво е процес в Linux?
Какво е процес в Linux?
В Linux, процесът е изпълняващ се програмен код. Той е единица за изпълнение, която има свой собствен набор от ресурси, включително памет, файлове и процесорно време. Всеки процес има уникален идентификатор, наречен PID (Process ID), който се използва от операционната система за идентифициране и управление на процеса.
Състав на процеса
Процесът се състои от следните компоненти:
- Кодове: Процесът съдържа кодове, които определят какво прави процесът. Този код може да бъде написан на различни езици, включително C, C++, Python и др.
- Данни: Процесът съдържа данни, които се използват от кода. Тези данни могат да бъдат променливи, масиви, структури и др.
- Ресурси: Процесът използва различни ресурси, които са необходими за неговото изпълнение. Тези ресурси могат да включват памет, файлове, процесорно време и др.
Състояния на процеса
Състоянието на процеса определя дали процесът е готов за изпълнение, дали се изпълнява в момента, дали е спрян или дали е завършил изпълнението си.
В Linux, процесът може да бъде в едно от следните състояния:
- Ново (New): Процесът е създаден, но все още не е започнал да се изпълнява.
- Изпълнение (Running): Процесът е започнал да се изпълнява и е в процес на работа.
- Заспиване (Waiting): Процесът е временно спрян и ще бъде възобновен, когато стане достъпен необходимият ресурс.
- Приостановка (Stopped): Процесът е спрян и няма да бъде възобновен, докато не бъде подновен от потребителя или от операционната система.
- Завършване (Terminated): Процесът е приключил изпълнението си.
Ново състояние
Когато процесът е създаден, той се намира в състояние Ново. В това състояние процесът не е започнал да се изпълнява и не заема никакви ресурси.
Изпълнение състояние
Процесът преминава в състояние Изпълнение, когато ядрото му предостави процесорно време. В това състояние процесът заема процесора и изпълнява своя код.
Заспиване състояние
Процесът преминава в състояние Заспиване, когато ядрото го спре, за да изчака за достъп до ресурс. В това състояние процесът не заема процесора и не използва никакви други ресурси.
Приостановка състояние
Процесът преминава в състояние Приостановка, когато потребител или ядрото го спре. В това състояние процесът не заема процесора, но може да използва други ресурси.
Завършване състояние
Процесът преминава в състояние Завършване, когато приключи изпълнението си. В това състояние процесът освобождава всички ресурси, които е използвал.
Преход между състоянията
Процесът може да премине от едно състояние в друго в следните случаи:
- От Ново към Изпълнение: Това се случва, когато ядрото предостави процесорно време на процеса.
- От Изпълнение към Заспиване: Това се случва, когато процесът се нуждае от ресурс, който в момента не е достъпен.
- От Заспиване към Изпълнение: Това се случва, когато ресурсът, който процесът е чакал, стане достъпен.
- От Изпълнение към Приостановка: Това се случва, когато потребител или ядрото спре процеса.
- От Приостановка към Изпълнение: Това се случва, когато потребител или ядрото поднови процеса.
- От Изпълнение към Завършване: Това се случва, когато процесът приключи изпълнението си.
Управление на състоянията на процеса
Операционната система управлява състоянията на процесите чрез различни механизми, включително:
- Сигнализация: Операционната система може да изпраща сигнали към процесите, за да ги уведоми за събития. Например, процесът може да получи сигнал, когато ресурсът, който е чакал, стане достъпен.
- Стопиране: Операционната система може да спре процес, като изпрати сигнал към него.
- Подновяване: Операционната система може да поднови процес, който е спрян, като изпрати сигнал към него.
Как да видя състоянията на процеса
За да видите състоянията на процеса, можете да използвате командата ps. Тази команда показва информация за всички процеси, които се изпълняват в системата.
За да видите състоянията на всички процеси, изпълнете следната команда:
ps -a
Тази команда ще покаже следната информация за всеки процес:
- PID: Идентификатор на процеса
- PPID: Идентификатор на родителя на процеса
- Uid: Идентификатор на потребителя
- Gid: Идентификатор на групата
- Stat: Състояние на процеса
- Времето: Време, прекарано от процеса в различни състояния
- Символи: Символи, използвани от процеса
Състоянието на процеса се показва в колоната Stat. Значенията на състоянията са следните:
- R – Изпълнение
- S – Заспиване
- T – Приостановка
- Z – Завършване
Например, ако видите следното в изхода на командата ps:
PID PPID Uid Gid Stat VmSize VmRSS Wchan TTY
1 0 root root S 12792 12792 0:00.00 init
Това означава, че процесът с PID 1 е в състояние S, което означава, че е спрян и чака за достъп до ресурс.
Можете също така да използвате командата ps, за да видите състоянията на конкретни процеси. За да направите това, използвайте флага -p, за да посочите PID на процеса, който искате да видите.
Например, за да видите състоянието на процеса с PID 1, изпълнете следната команда:
ps -p 1
Тази команда ще покаже същата информация, както командата ps -a, но само за процеса с PID 1.
Създаване на процес
Процесът може да бъде създаден от друг процес или от ядрото на операционната система. Когато процесът е създаден, операционната система му заделя необходимите ресурси и му присвоява уникален PID.
Управление на процесите
Операционната система управлява процесите чрез различни механизми, включително:
- Поделяне на памет: Операционната система разделя паметта на системата между различните процеси.
- Управление на процесорното време: Операционната система определя колко време всеки процес получава да използва процесора.
- Сигнализация: Операционната система може да изпраща сигнали към процесите, за да ги уведоми за събития.
Примери
Ето няколко примера за процеси в Linux:
- Процесът на терминала: Този процес е отговорен за управлението на терминала, който използвате за взаимодействие с операционната система.
- Процесът на браузъра: Този процес е отговорен за отварянето и показването на уеб страници в браузъра ви.
- Процесът на редактора: Този процес е отговорен за редактирането на текстови файлове.
Команди за управление на процесите
Команда | Описание |
---|---|
ps | Показва информация за всички процеси, които се изпълняват в системата. |
kill | Изпраща сигнал към процес. |
pkill | Изпраща сигнал към всички процеси, които отговарят на определени критерии. |
pgrep | Намира процеси, които отговарят на определени критерии. |
ps
Командата ps показва информация за всички процеси, които се изпълняват в системата.
Флагове
- -a – Показва всички процеси, включително процеси в състояние Заспиване и Приостановка.
- -e – Показва всички процеси, включително процеси в състояние Завършване.
- -p <PID> – Показва информация за процес с определен PID.
- -u <потребител> – Показва информация за процеси, изпълнени от определен потребител.
- -g <група> – Показва информация за процеси, принадлежащи към определена група.
- -f – Показва пълна информация за процесите, включително времето, прекарано от процеса в различни състояния.
Примери
- За да видите всички процеси, изпълнявани от потребителя root, изпълнете следната команда:
ps -u root
- За да видите информация за процеса с PID 1, изпълнете следната команда:
ps -p 1
- За да видите пълна информация за всички процеси, изпълнявани в системата, изпълнете следната команда:
ps -af
kill
Командата kill изпраща сигнал към процес.
Сигналите
- SIGKILL – Принуждава процеса да приключи.
- SIGINT – Изпраща сигнал за прекъсване към процеса.
- SIGTERM – Изпраща сигнал за прекратяване към процеса.
Примери
- За да принудите процеса с PID 1 да приключи, изпълнете следната команда:
kill -9 1
- За да изпратите сигнал за прекъсване към процеса с PID 1, изпълнете следната команда:
kill -INT 1
pkill
Командата pkill изпраща сигнал към всички процеси, които отговарят на определени критерии.
Критерии
- Име на процеса – pkill <име-на-процеса>
- PID – pkill -p <PID>
- Група – pkill -g <име-на-група>
- Идентификатор на потребителя – pkill -u <потребител>
Примери
- За да изпратите сигнал за прекратяване към всички процеси с името firefox, изпълнете следната команда:
pkill firefox
- За да изпратите сигнал за прекъсване към всички процеси с PID 100 или по-голям, изпълнете следната команда:
pkill -p 100-
pgrep
Командата pgrep намира процеси, които отговарят на определени критерии.
Критерии
- Име на процеса – pgrep <име-на-процеса>
- PID – pgrep -p <PID>
- Група – pgrep -g <име-на-група>
- Идентификатор на потребителя – pgrep -u <потребител>
Примери
- За да намерите всички процеси с името firefox, изпълнете следната команда:
pgrep firefox
- За да намерите всички процеси с PID 100 или по-голям, изпълнете следната команда:
pgrep -p 100-
Заключение
Процесите са основни единици за изпълнение в Linux. Те са отговорни за изпълнението на програми и за управлението на ресурсите на системата.
Благодарим ви за прочитането на статията! Ако намерихте информацията за полезна, можете да дарите посредством бутоните по-долу:
Donate ☕️ Дарете с PayPalDonate 💳 Дарете с Revolut