Процес у Linux (як і UNIX) - це програма, яка виконується в окремому віртуальному адресному просторі.
Кожен процес виконується у своїй віртуальному адресному просторі, тобто. процеси захищені один від одного і крах одного процесу ніяк не вплине на інші процеси, що виконуються, і на всю систему в цілому. Один процес не може прочитати будь-що з пам’яті (або записати в неї) іншого процесу без “дозволу” на те іншого процесу. Санкціоновані взаємодії між процесами допускаються системою.
Linux підтримує паралельне (або квазіпаралельне за наявності лише одного процесора) виконання процесів користувача.
Ядро надає системні виклики для створення нових процесів та управління породженими процесами.
Будь-яка програма може почати виконуватися лише якщо інший процес її запустить або станеться якесь переривання (наприклад, переривання зовнішнього пристрою).
У зв’язку з розвитком SMP (Symmetric Multiprocessor Architectures) в ядро Linux було впроваджено механізм ниток чи потоків управління (threads). Нитка - це процес, який виконується у віртуальній пам’яті, що використовується разом з іншими нитками процесу, який має окрему віртуальну пам’ять.
Кожен процес реагує на сигнали і, звісно, може встановити власну реакцію сигнали, вироблені операційної системою.
Сигнал – спосіб інформування процесу ядром про подію якоїсь події.
Приклади сигналів:
закінчення породженого процесу
виникнення виняткової ситуації
сигнали, що надходять від користувача під час натискання певних клавіш.
Для створення процесів використовуються два системні виклики: fork() та exec. fork() створює новий адресний простір, який є повністю ідентичним адресному простору основного процесу. Після виконання цього системного виклику ми отримуємо два абсолютно однакові процеси - основний і породжений. Функція fork() повертає PID (Process ID – ідентифікатор породженого процесу) – в основному. PID – це ціле число.
За допомогою команди kill можна згенерувати сигнал завершення процесу та передати його конкретному процесу за його PID.
Коли ви виконуєте команду “kill”, то фактично ви посилаєте системі сигнал, щоб змусити її завершити додаток, що некоректно веде себе.
Ви можете переглянути всі сигнали за допомогою команди:
kill -l
Синтаксис використання “kill”:
kill [сигнал или опция] PID
Стандартний сигнал (якщо він не заданий) - SIGTERM. Якщо він не допомагає, для примусового завершення процесу можна використати такі варіанти:
$ kill SIGKILL PID
$ kill -9 PID
Якщо ви не знаєте точно програми PID, просто запустіть команду:
ps ux
top
Команда ps дозволяє зробити як би “миттєвий знімок” процесів, запущених у системі. На відміну від ps, команда top відображає стан процесів та їх активність “в реальному режимі часу”.