Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Выполнение процесса




Состояние зомби – на этом этапе выполнение процесса закончилось, его код выгружается из памяти, окружение уничтожается, но запись в таблице процессов еще остается.

Умирание процесса – после всех завершающих стадий удаляется запись из таблицы процессов – процесс завершил свою работу.

Во время работы процесса, ядро контролирует его состояние, и в случае возникновения непредвиденной ситуации управляет процессом с помощью посылки ему сигнала. Сигнал – это простейший способ межпроцессорного (то есть между процессами) взаимодействия. Существует несколько типов сигналов. Для каждого из типов предусмотрено действие по умолчанию. Процесс может воспользоваться действием по умолчанию, или, если у него есть обработчик сигнала, то он может перехватить и обработать или игнорировать сигнал. Сигналы SIGKILL и SIGSTOP невозможно ни перехватить, ни игнорировать.

По умолчанию возможны несколько действий:

игнорировать – продолжать работу, несмотря на то, что получен сигнал.

завершить – завершить работу процесса.

завершить + core – завершить работу процесса и создать файл в текущем каталоге с именем core, содержащий образ памяти процесса (код и данные).

остановить – приостановить выполнение процесса, но не завершать его работу и не выгружать код из памяти.

Вот список всех сигналов, существующих в системе на сегодняшний день:

Название Действие по умолчанию Значение
SIGABRT Завершить + core Сигнал отправляется, если процесс вызывает системный вызов abort()
SIGTERM Завершить Сигнал обычно представляет своего рода предупреждение, что процесс вскоре будет уничтожен. Этот сигнал позволяет процессу соответствующим образом “подготовиться к смерти” – удалить временные файлы, завершить необходимые транзакции и т.д. Команда kill по умолчанию отправляет именно этот сигнал.
SIGTTIN Остановить Сигнал генерируется ядром (драйвером управляющего терминала) при попытке процесса фоновой группы осуществить чтение с управляющего терминала.
SIGTTOU Остановить Сигнал генерируется ядром (драйвером терминала) при попытке процесса фоновой группы осуществить запись на управляющий терминал.
SIGALRM Завершить Сигнал отправляется, когда срабатывает таймер, ранее установленный.
SIGBUS Завершить + core Сигнал свидетельствует о некоторой аппаратной ошибке. Обычно этот сигнал отправляется при обращении к недопустимому виртуальному адресу, для которого отсутствует соответствующая физическая страница.
SIGCHLD Игнорировать Сигнал, посылаемый родительскому процессу при завершении его потомка.
SIGSEGV Завершить + core Сигнал свидетельствует об обращении процесса к недопустимому адресу или области памяти, для которой у процесса недостаточно привилегий доступа.
SIGFPE Завершить + core Сигнал свидетельствует о возникновении особых ситуаций, таких как деление на 0 или переполнение операции с плавающей точкой.
SIGHUP Завершить Сигнал посылается лидеру сеанса, связанному с управляющим терминалом, что терминал отсоединился (потеря линии). Сигнал также посылается всем процессам текущей группы при завершении выполнения лидера. Этот сигнал иногда используют в качестве простейшего средства межпроцессного взаимодействия. В частности, он применяется для сообщения демонам о необходимости обновить конфигурационную информацию. Причина выбора именно сигнала SIGHUP заключается в том, что демон по определению не имеет управляющего терминала и, соответственно, обычно не получает этого сигнала.
SIGILL Завершить + core Сигнал посылается ядром, если процесс попытается выполнить недопустимую инструкцию.
SIGINT Завершить Сигнал посылается ядром всем процессам при нажатии клавиши прерывания (<CTRL>+<C>)
SIGKILL Завершить Сигнал, при получении которого выполнение процесса прекращается. Этот сигнал нельзя не перехватить, не проигнорировать.
SIGPIPE Завершить Сигнал посылается при попытке записи в сокет, получатель данных которого завершил выполнение или закрыл файловый указатель на сокет.
SIGPOLL Завершить Сигнал отправляется при наступлении определенного события для устройства, которое является опрашиваемым (например, получен пакет по сети)
SIGPWR Игнорировать Сигнал генерируется при угрозе потери питания. Обычно он отправляется, когда питание системы переключается на источник бесперебойного питания (UPS).
SIGQUIT Завершить Сигнал посылается всем процессам текущей группы при нажатии клавиш <CTRL>+<\>.
SIGSTOP Остановить Сигнал отправляется всем процессам текущей группы при нажатии пользователем клавиш <CTRL>+<Z>. Получение сигнала вызывает останов выполнения процесса.
SIGSYS   Завершить + core   Сигнал отправляется ядром при попытке осуществления процессом недопустимого системного вызова.
SIGUSR1 Завершить Сигнал предназначен для прикладных задач как простейшее средство межпроцессного взаимодействия.
SIGUSR2 Завершить Сигнал предназначен для прикладных задач как простейшее средство межпроцессного взаимодействия.

Немаловажную роль в жизни процессов играет также планировщик – это часть ядра, ответственная за многозадачность системы. Ведь в единицу времени на одном процессоре может выполняться только одна задача. Именно планировщик определяет, какой из запущенных процессов первым будет выполняться, какой вторым. Для этого у каждого процесса существует еще один параметр, называемый приоритетом. Для того, чтобы посмотреть приоритет процессов, нам необходимо использовать уже знакомую команду ps с параметром -l (long – расширенный вывод):

[gserg@WebMedia gserg]$ ps -l

F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD

0 S 500 1554 1553 0 75 0 – 1135 wait4 pts/1 00:00:00 bash

0 R 500 1648 1554 0 81 0 – 794 – pts/1 00:00:00 ps

[gserg@WebMedia gserg]$

Во время своей работы, планировщик в первую очередь ставит на выполнение задачи с меньшим приоритетом. Так, приоритетом 0, обладают только критические системный задачи, а отрицательным приоритетом – процессы ядра. Задачам с большим приоритетом достается меньше процессорного времени и потому, работают они как правило, медленнее, и потребляют намного меньше системных ресурсов.

Остается только решить вопрос, а может ли пользователь управлять процессами и системными параметрами? Конечно может! Для этого в Linux есть набор инструментов, позволяющих изменять приоритет процесса, посылать процессам сигналы. О них мы с вами сейчас и поговорим.

Первый инструмент – команда nice:

nice -n command – позволяет изменять приоритет, с которым будет выполняться процесс после запуска. Без указания команды command выдает текущий приоритет работы. n по умолчанию равен 10. Диапазон приоритетов расположен от -20 (наивысший приоритет) до 19 (наименьший). Пример использования команды nice:

[gserg@WebMedia gserg]$ less.bashrc &

[1] 3070

[gserg@WebMedia gserg]$ ps -efl | grep less

0 T gserg 3070 3018 0 80 0 – 1004 finish 17:56 pts/3 00:00:00 less.bashrc

[gserg@WebMedia gserg]$ nice -n 20 less.bashrc &

[1] 3081

[gserg@WebMedia gserg]$ ps -efl | grep less

0 T gserg 3081 3018 0 99 19 – 1003 finish 18:01 pts/3 00:00:00 less.bashrc

Сравнивая цифры приоритета, заметим, что команда less в первом случае выполнялась с приоритетом 80, а во втором – 99. Таким образом, команда nice сделала свое дело – понизила приоритет задачи. Нужно учесть только несколько особенностей выполнения команды nice. Во-первых, команда понизит приоритет насколько это возможно (в примере на 19 вместо 20). Во-вторых – повышать приоритет задачи в системе может только суперпользователь.

Еще одна команда:

nohup command – позволяет процессу продолжить выполнение даже при потере управляющего терминала (SIGHUP). Эту команду выгодно использовать когда необходимо выполнить команду продолжительного действия. Вы запускаете команду и закрываете терминальный сеанс, а она при этом продолжает выполняться. Вывод команды nohup сохранит в файл nohup.out в текущем каталоге.

Самой часто используемой командой управления процессами можно по праву считать команду kill:

kill -SIGNAL pid – посылает сигнал процессу с идентификатором pid. Если сигнал не указан, команда посылает процессу сигнал SIGTERM. Вот пример ее использования:

[gserg@WebMedia gserg]$ less &

[1] 1352

[gserg@WebMedia gserg]$ ps

PID TTY TIME CMD

1322 pts/2 00:00:00 bash

1352 pts/2 00:00:00 less

1353 pts/2 00:00:00 ps

[gserg@WebMedia gserg]$ kill -SIGKILL 1352

[gserg@WebMedia gserg]$ ps

PID TTY TIME CMD

1322 pts/2 00:00:00 bash

1355 pts/2 00:00:00 ps

[1]+ Killed less

Не менее популярной чем kill командой является killall:

killall -s SIGNAL процесс – посылает сигнал всем процессам с именем процесс. Если сигнал не указан, посылает SIGTERM.

Сигнал для этой команды необходимо указывать без приставки SIG. Для получения соответствия цифрового вида и имени сигнала используется опция -l команды killall. Вот пример ее использования:

[gserg@WebMedia gserg]$ less./.bashrc&

[1] 1374

[gserg@WebMedia gserg]$ less./.bashrc&

[2] 1375

[1]+ Stopped less./.bashrc

[gserg@WebMedia gserg]$ less./.bashrc&

[3] 1376

[2]+ Stopped less./.bashrc

[gserg@WebMedia gserg]$ ps

PID TTY TIME CMD

1322 pts/2 00:00:00 bash

1374 pts/2 00:00:00 less

1375 pts/2 00:00:00 less

1376 pts/2 00:00:00 less

1377 pts/2 00:00:00 ps

[3]+ Stopped less./.bashrc

[gserg@WebMedia gserg]$ killall -s KILL less

[1] Killed less./.bashrc

[2]- Killed less./.bashrc

[3]+ Killed less./.bashrc

[gserg@WebMedia gserg]$

 






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных