Page 33 - 4820
P. 33

Процеси можуть взаємодіяти між собою за допомогою так званих сигналів. Існує
                  обмежена  кількість  сигналів,  які  мають  свої  числові  ідентифікатори  і  мнемонічні
                  позначення. Сигнали діють як переривання, тобто вони призупиняють процес, до якого
                  вони направлені, і викликають відповідний обробник сигналу. Деякі із сигналів мають
                  чітко  визначене  значення  і  обробляються  системним  обробником.  Інші  можуть
                  перехоплюватись процесом, тобто процес може встановлювати для  цих сигналів свій
                  обробник.  Звичайно,  існують  певні  узгодження  щодо  призначення  певних  сигналів,  і
                  програмістам слід дотримуватись їх при розробці своїх обробників.
                         Користувач також може відправити процесу сигнал, для цього існує команда kill.
                  Формат команди:
                         kill [-<сигнал>] <PID>
                  <сигнал> – це мнемонічне або числове позначення сигналу (наприклад, STOP, TERM,
                  CONT, 9), а <PID> –ідентифікатор процесу, якому посилають сигнал. Якщо не вказати
                  параметр <сигнал>, то буде  відправлено сигнал завершення процесу TERM (15). Цей
                  сигнал  може  перехоплюватись  процесом,  але  існує  сигнал  KILL  (9),  який  не
                  перехоплюється і безумовно знищує процес (якщо у користувача є достатньо для цього
                  прав). Таким чином, можна зупинити будь-який свій процес, якщо над ним втрачене
                  керування  (або  процес  “завис”,  що  у  системі  UNIX  трапляється  дуже  нечасто,  або
                  користувач не знає, яку команду процес може сприйняти). Для цього слід зайти з іншої
                  консолі (віртуального або фізичного терміналу) і дати команду kill -9 <PID>, де <PID>
                  можна дізнатись за допомогою попередньої команди ps.
                         Команда  ps  без  аргументів  дає  список  лише  процесів  даного  користувача  і  (в
                  деяких системах) лише пов’язаних з конкретним терміналом. При роботі  в графічній
                  оболонці,  а  також  при  роботі  на  персональному  комп’ютері,  де  підтримується  певна
                  кількість  так  званих  віртуальних  терміналів,  користувач  може  працювати  в  системі,
                  використовуючи  одночасно  кілька  терміналів  (наприклад,  на  персональних
                  комп’ютерах  між  ними  можна  переключатись  комбінаціями  клавіш  Alt+F#,  де  F#  –
                  одна з функціональних клавіш). Однак в часи створення системи UNIX такі можливості
                  не  передбачались.  Передбачалось,  що  користувач  має  доступ  лише  до  одного
                  терміналу.  Тому  було  розроблено  систему  завдань  і  фонового  виконання  процесів,
                  щоби користувач міг одночасно виконувати різні задачі.
                         Коли  користувач  дає  команду  з  консолі,  в  системі  запускається  процес,  або
                  кілька процесів. Якщо в командному рядку утворюється конвеєр (наприклад, ls –l | wc –
                  l),  то  всі  процеси  (у  нашому  прикладі  ls  і  wc)  запускаються  одночасно.  Разом  вони
                  складають  так  зване  завдання.  Завдання  пов’язано  з  терміналом.  Поки  воно  не
                  завершиться, користувач не має можливості вводити наступну команду. Це так званий
                  пріоритетний  (foreground)  режим  виконання  завдання.  Щоби  під  час  виконання
                  завдання мати можливість запускати інше завдання, перше з них слід запустити в так
                  званому  фоновому  (background)  режимі.  Для  того,  щоби  запустити  завдання  в
                  фоновому режимі, слід завершити рядок команди символом “&” (після пробілу). При
                  цьому стандартний ввід за замовчанням назначається порожньому файлу /dev/null. Слід
                  врахувати,  що  завдання  в  фоновому  режимі  може  намагатись  здійснювати  вивід  на
                  екран,  заважаючи  при  цьому  виводу  пріоритетного  процесу  (спробуйте  працювати,
                  запустивши  у  фоновому  режимі  команду  ping).  Тому  слід  подбати,  щоби  фонові
                  завдання здійснювали вивід у файли (див. Лабораторну роботу №4). Завдання, що було
                  запущено у пріоритетному режимі, можна перевести у фоновий. Для цього необхідно
                  спочатку  призупинити  виконання  завдання  (комбінація  клавіш  CTRL-Z).  Далі  можна
                  поновити  виконання  завдання  у  пріоритетному  режимі  (команда  fg)  або  у  фоновому

                                                              31
   28   29   30   31   32   33   34   35   36   37   38