Процес породжується за допомогою системного виклику fork(). При цьому виклику відбувається перевірка на наявність вільної пам'яті, доступної для розміщення нового процесу. Якщо необхідна пам'ять доступна, то створюється процес-нащадок поточного процесу, що представляє собою точну копію процесу, що викликається При цьому в таблиці процесів для нового процесу будується відповідна структура. Нова структура створюється також у таблиці користувача. При цьому всі змінні ініціалізуються нулями. Цьому процесу присвоюється новий унікальний ідентифікатор, а ідентифікатор батьківського процесу запам'ятовується в блоці керування процесом.
Процеси, що виконують різні програми, утворюються завдяки застосуванню наявних у стандартній бібліотеці Linux функцій “сімейства ехес”: ехесl, ехесlр, ехесlе, ехесv, ехесvе, ехесvр. Ці функції відрізняються форматом виклику, але в остаточному підсумку виконують одну задачу: заміщають всередині поточного процесу код, що виконується, на код, що міститься в зазначеному файлі. Цей файл може бути не тільки двійковим файлом Linux, що виконується (аналог файла *.exe в системі Windows), але і сценарієм командного інтерпретатора, і двійковим файлом іншого формату (наприклад, класом java, що виконується файлом DOS).
Таким чином, якщо операція запуску програми у DOS і Windows виконується як єдине ціле, то у Linux (і в Unix взагалі) розділена на два етапи: спочатку здійснюється запуск, а потім визначається, яка програма буде працювати. Чи є в цьому сенс і чи не занадто великі додаткові витрати? Адже створення копії процесу передбачає копіювання дуже значного обсягу інформації.
Сенс у даному підході є суттєвий. Дуже часто програма повинна зробити деякі дії ще до того, як почнеться власне її виконання. Наприклад, створити непоіменований канал для спілкування з іншими процесами. Реалізується це дуже просто: спочатку “відмежовуються” процеси, потім виконується системний виклик рiре() для створення каналу - і тільки після цього запускається програма із функції еxес().
Стосовно додаткових витрат, то вони найчастіше виявляються надто малими: при створенні копії процесу його індивідуальні дані фізично нікуди не копіюються. Замість цього використовується техніка, відома за назвою сору-оn-write(копіювання при записі): сторінки даних обох процесів особливим чином позначаються, і тільки тоді, коли один процес намагається змінити вміст будь-якої своєї сторінки, він дублюється. Щоб створити новий активний процес рядовому користувачеві зовсім не обов’язково знати про всі ці системні виклики. Йому достатньо лише ініціювати виконання команди або програми, набравши в командному рядку відповідне ім’я файла, або натиснувши на відповідну піктограму на робочому столі. Приклад запуску годинника:
xclock
Для запуску процесу у фоновому режимі необхідно після імені команди чи імені файла ввести символ & і лише потім натиснути на клавішу <Enter>. Приклад запуску годинника в фоновому режимі:
xclock &
Щоб призупинити активний процес необхідно одночасно натиснути клавіші <Ctrl><Z>. Поки процес зупинено на нього не витрачається час процесора. Але визавжди можете відновити процес, причому як на передньому плані, так і в фоні. Для поновлення процесу в активному режимі використовується команда fg (“foreground” - передній план), а в фоновому режимі – команда bg (“background” - задній план).
Ще одне зауваження. Команди fg і bg звичайно переводять на передній план чи у фоновий режим процеси, що були зупинені останніми (що визначається символом “+” після номера роботи при використанні команди jobs).
Якщо ви виконуєте багато процесів (робіт) одночасно, ви можете перевести на передній план чи, навпаки, у фоновий режим конкретну роботу із заданням її номера як аргумента команд fg або bg:
fg %2 (переведення на передній план роботи номер 2),
bg %3 (переведення у фон роботи номер 3).
Для цих команд не можна використовувати ідентифікатори процесів. Крім того, використання тільки номерів робіт, наприклад
%2
еквівалентно команді
fg %2
Тип процесу (роботи) можна легко визначити за допомогою команди jobs. Наприклад, якщо після виконання цієї команди ми отримали на екрані дисплея інформацію
[1]- Running xclock
[2]- Running xeyes &
[3]+ Stopped xcalc
то це означає, що перший процес (робота) в даний момент є активним, другий процес (робота) – фоновим, а третій процес (робота) – відкладений.
Можна також отримати список процесів (робіт) лише одного типу, вказавши відповідну опцію в команді jobs:
jobs –r - видача лише активних процесів (робіт),
jobs –s - видача лише відкладених процесів (робіт).
Пам’ятайте, що керування роботами, це властивість оболонки операційної системи. Команди fg, bg і jobs - внутрішні команди оболонки bash. Якщо з якоїсь причини ви використовуєте текстову оболонку, що не підтримує керування роботами, там ви не знайдете цих команд. На додаток до цього, є деякі аспекти керування роботами, що розрізняються в оболонках bash і tcsh. Деякі оболонки не здатні керувати роботами, хоча більшість оболонок Linux мають таку можливість.