Процеси.

Основи роботи з Linux. -> Управління процесами.

Управління процесами.

Процес у 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 відображає стан процесів та їх активність “в реальному режимі часу”.

Корисні комбінації.

+ — сортування за PID; + - сортувати процеси за віком; +

- сортувати процеси використання ЦПУ; + — сортувати процеси використання пам’яті; + — сортування за часом виконання.

Pkill

Команда pkill дозволяє використовувати розширені шаблони регулярних виразів та інші критерії відповідності. Замість використання PID ви можете завершити програму, ввівши ім’я його процесу. Наприклад, для завершення роботи Firefox просто введіть команду:

pkill firefox

Killall

Killall також використовує ім’я процесу замість PID та завершує всі екземпляри процесу з цим ім’ям. Наприклад, якщо ви запустили кілька екземплярів Firefox, ви можете завершити їх за допомогою команди:

$ killall firefox

Запустити програму у фоновому режимі можна за допомогою конструкції <команда> &

Наприклад, такий скрипт timer.py.

import time

while True:
    time.sleep(1)
    print(time.time())

Може бути запущений у фоновому режимі командою:

python timer.py &
Основи роботи з Linux. -> Файлова система.

Консоль. Робота із файловою системою.

pwd

Отримання поточної директорії.

cd

Зміна каталогу.

Може використовуватися без параметрів переходу до домашнього каталогу.

mkdir [options]

Створення директорії.

mkdir /home/ryan/foo
mkdir ./blah
mkdir ../dir1
mkdir ~/linuxtutorialwork/dir2

Ми можемо використовувати абсолютні та відносні шляхи.

Ми можемо використовувати .. для створення каталогів на рівні вище за поточний каталог.

Ми можемо використовувати префікс ~ для позначення домашнього каталогу.

Корисні налаштування.

-p - говоримо про те, що хочемо створити батьківські каталоги, якщо їх немає.

-v - докладний висновок, що відбувається.

rmdir [options]

Вилучення директорій.

Опції аналогічні до mkdir.

touch [options]

Створення порожнього файлу.

cp [options]

Копіювання файлу чи директорії.

cp /home/ryan/linuxtutorialwork/example2 example3
cp example2 ../../backups
cp example2 ../../backups/example4
cp /home/ryan/linuxtutorialwork/example2 /otherdir/foo/example5

При копіюванні файлу він створиться з новим ім’ям, вказаним у source.

При копіюванні директорії, вона буде скопійована з усіма файлами з тими самими іменами, але необхідно використовувати ключ -r.

mv [options]

Переміщення файлів та директорій.

Працює так само як cp, але при переміщенні директорії не обов’язково використовувати ключ -r.

rm [options]

Видаляє файли та не пусті директорії.

Щоб видалити не порожню директорію використовується ключ -r.