47856 (597363), страница 6
Текст из файла (страница 6)
ps [-опции] – определение запущенных в системе процессов
Краткая характеристика наиболее важных опций:
- ax - список всех процессов, запущенных в системе;
–u – отображение % ЦПУ и памяти занимаемых запущенными процессами;
–l – длинный формат отображения информации о процессах (с выводом приоритета процесса и значениния nice)
Независимо от наличия опций команда ps выдает для каждого процесса отдельную строку, но содержимое этой строки может быть разным. В зависимости от заданных опций могут присутствовать следующие поля:
-
USER — имя владельца процесса;
-
PID — идентификатор процесса в системе;
-
PPID — идентификатор родительского процесса;
-
%CPU — доля времени центрального процессора (в процентах), выделенного данному процессу;
-
%MEM — доля реальной памяти (в процентах), используемая данным процессом;
-
VSZ — виртуальный размер процесса (в килобайтах);
-
RSS — размер резидентного набора (количество 1K-страниц в памяти);
-
STIME — время старта процесса;
-
TTY — указание на терминал, с которого запущен процесс;
-
S или STAT — статус процесса;
-
PRI — приоритет планирования;
-
NI — значение nice (см. описание команды nice ниже);
-
TIME — сколько времени центрального процессора занял данный процесс;
-
CMD или COMMAND — командная строка запуска программы, выполняемой данным процессом;
а также и другие поля, полный список которых приведен на man-странице, посвященной команде ps.
В поле Статус процесса могут стоять следующие значения:
-
R — выполнимый процесс, ожидающий только момента, когда планировщик задач выделит ему очередной квант времени;
-
S — процесс "спит";
-
D — процесс находится в состоянии подкачки на диске;
-
T — остановленный процесс;
-
Z — процесс-зомби.
Рядом с указателем статуса могут стоять дополнительные символы из следующего набора:
-
W — процесс не имеет резидентных страниц;
-
< — высоко-приоритетеный процесс;
-
N — низко-приоритетный процесс;
-
L — процесс имеет страницы, заблокированные в памяти.
Например, результат выполнения нижеприведенной команды показал, что в системе работали на момент снятия данных два процесса sh (с идентификатором 927, идентификатор процесса предка - 1) и ps (с идентификатором 1001, идентификатор процесса предка – 927, т.е. sh порождает процесс ps). Терминалы с которых запущены процессы – tty5.
ps -flu lev
PID PPID TTY PRI TIME CMD
927 1 tty5 0:04 sh
1001 927 tty5 0:02 ps
Для вывода листинга процессов, принадлежащих пользователю можно воспользоваться конструкцией:
ps -f|grep .
Команда top
Команда ps позволяет сделать как бы "моментальный снимок" процессов, запущенных в системе. В отличие от ps команда top отображает состояние процессов и их активность "в реальном режиме времени". На рисунке 2.2.1. изображено окно терминала, в котором запущена программа top.
Рис. 2.2.1. Вывод команды top
В верхней части окна отображается астрономическое время, время, прошедшее с момента запуска системы, число пользователей в системе, число запущенных процессов и число процессов, находящихся в разных состояниях, данные об использовании ЦПУ, памяти и свопа. А далее идет таблица, характеризующая отдельные процессы. Число строк, отображаемых в этой таблице, определяется размером окна: сколько строк помещается, столько и выводится. Графы таблицы обозначены так же, как поля вывода команды ps. Содержимое окна обновляется каждые 5 секунд.
Приоритеты, значение nice и команда renice
Приоритет для каждого процесса устанавливается в тот момент, когда процесс порождается. Приоритет процесса определяется так называемым "значением nice", которое лежит в пределах от +20 (наименьший приоритет, процесс выполняется только тогда, когда ничто другое не занимает процессор), до -20 (наивысший приоритет).
Значение nice устанавливается для каждого процесса в момент порождения этого процесса и при обычном запуске команд или программ принимается равным приоритету родительского процесса. Но существует специальная команда nice, которая позволяет изменять значение nice при запуске программы. Формат использования этой программы:
nice [- adnice] command [args]
где adnice — значение (от –20 до +19), добавляемое к значению nice процесса-родителя. Полученная сумма и будет значением nice для запускаемого процесса. Отрицательные значения может устанавливать только суперпользователь. Если опция — adnice не задана, то по умолчанию для процесса-потомка устанавливается значение nice, увеличенное на 10 по сравнению со значением nice родительского процесса. Очевидно, что если вы не суперпользователь, то применять эту команду имеет смысл только тогда, когда вы хотите запустить некий процесс с низким значением приоритета.
Другая команда, renice, служит для изменения значения nice для уже выполняющихся процессов. Ее формат таков:
renice priority [[-p] PID] [[-g] grp] [[-u] user]
Например, команда
renice -1 987 –u daemon –p 32
увеличивает на 1 приоритет процессов с PID 987 и 32, а также всех процессов пользователя daemon.
Суперпользователь может изменить приоритет любого процесса в системе. Другие пользователи могут изменять значение приоритета только для тех процессов, для которых данный пользователь является владельцем. При этом обычный пользователь может только уменьшить значение приоритета (увеличить значение nice), но не может увеличить приоритет, даже для возврата значения nice к значению, устанавливаемому по умолчанию. Поэтому процессы с низким приоритетом не могут породить "высокоприоритетных детей".
Сигналы и команда kill
Сигналы — это средство, с помощью которого процессам можно передать сообщения о некоторых событиях в системе.
Сами процессы тоже могут генерировать сигналы, с помощью которых они передают определенные сообщения ядру и другим процессам. С помощью сигналов можно осуществлять такие акции управления процессами, как приостановка процесса, запуск приостановленного процесса, завершение работы процесса. Всего в Linux существует 63 разных сигнала, их перечень можно посмотреть по команде
kill –l
Сигналы принято обозначать номерами или символическими именами. Все имена начинаются на SIG, но эту приставку иногда опускают: например, сигнал с номером 1 обозначают или как SIGHUP, или просто как HUP.
Когда процесс получает сигнал, то возможен один из двух вариантов развития событий. Если для данного сигнала определена подпрограмма обработки, то вызывается эта подпрограмма. В противном случае ядро выполняет от имени процесса действие, определенное по умолчанию для данного сигнала. Вызов подпрограммы обработки называется перехватом сигнала. Когда завершается выполнение подпрограммы обработки, процесс возобновляется с той точки, где был получен сигнал.
Можно заставить процесс игнорировать или блокировать некоторые сигналы. Игнорируемый сигнал просто отбрасывается процессом и не оказывает на него никакого влияния. Блокированный сигнал ставится в очередь на выдачу, но ядро не требует от процесса никаких действий до разблокирования сигнала. После разблокирования сигнала программа его обработки вызывается только один раз, даже если в течение периода блокировки данный сигнал поступал несколько раз.
В табл. 2.2.1. приведены некоторые из часто встречающихся сигналов.
Таблица 2.2.1. Сигналы
| № | Имя | Описание | Можно перехватывать | Можно блокировать | Комбинация клавиш |
| 1 | HUP | Hangup. Отбой | Да | Да | |
| 2 | INT | Interrupt. В случае выполнения простых команд вызывает прекращение выполнения, в интерактивных программах — прекращение активного процесса | Да | Да | + или |
| 3 | QUIT | Как правило, сильнее сигнала Interru | Да | Да | + |
| 4 | ILL | Illegal Instruction. Центральный процессор столкнулся с незнакомой командой (в большинстве случаев это означает, что допущена программная ошибка). Сигнал отправляется программе, в которой возникла проблема | Да | Да | |
| 8 | FPE | Floating Point Exception. Вычислительная ошибка, например, деление на ноль | Да | Да | |
| 9 | KILL | Всегда прекращает выполнение процесса | Нет | Нет | |
| 11 | SEGV | Segmentation Violation. Доступ к недозволенной области памяти | Да | Да | |
| 13 | PIPE | Была предпринята попытка передачи данных с помощью конвейера или очереди FIFO, однако не существует процесса, способного принять эти данные | Да | Да | |
| 15 | TERM | Software Termination. Требование закончить процесс (программное завершение) | Да | Да | |
| 17 | CHLD | Изменение статуса порожденного процесса | Да | Да | |
| 18 | CONT | Продолжение выполнения приостановленного процесса | Да | Да | |
| 20 | TSTR | Сигнал останова, генерируемый клавиатурой. Переводит процесс в фоновый | Да | Да | + |
Как видно из таблицы 2.2.1, некоторые сигналы можно сгенерировать с помощью определенных комбинаций клавиш. Но такие комбинации существуют не для всех сигналов. Зато имеется команда kill, которая позволяет послать заданному процессу любой сигнал.
Для посылки сигнала процессу (или группе процессов) можно воспользоваться командой kill в следующем формате:
kill [-сигн] PID [PID..]
где сигн — это номер сигнала, причем если указание сигнала опущено, то посылается сигнал 15 (TERM — программное завершение процесса). Чаще всего используется сигнал 9 (KILL), с помощью которого суперпользователь может завершить любой процесс. Но сигнал этот очень "грубый", если можно так выразиться, поэтому его использование может привести к нарушению порядка в системе. Поэтому в большинстве случаев рекомендуется использовать сигналы TERM или QUIT, которые завершают процесс более "мягко".
Наиболее часто команду kill вынужден применять суперпользователь. Он должен использовать ее для уничтожения процессов-зомби, зависших процессов (они показываются в листинге команды ps как ), процессов, которые занимают слишком много процессорного времени или слишком большой объем памяти и т. д. Особый случай — процессы, запущенные злоумышленником.
Перевод процесса в фоновый режим
Если вы запускаете какой-то процесс путем запуска программы из командной строки, то обычно процесс запускается, как говорят, "на переднем плане". Это значит, что процесс "привязывается" к терминалу, с которого он запущен, воспринимая ввод с этого терминала и осуществляя на него вывод. Но можно запустить процесс в фоновом режиме, когда он не связан с терминалом. Для запуска процесса в фоновом режиме в конце командной строки запуска программы добавляют символ & (амперсанд).
Например, в фоновом режиме запускается процесс cc prog.c:
$ cc prog.c &
2388
$
Shell выводит номер этого процесса (PID) и разрешает ввод следующей команды.
Фоновые процессы обладают некоторыми недостатками:
-
не допускают ввода с клавиатуры;
-
обспечивают вывод на экран, но при этом нарушают целостность вывода диалогового процесса.
Общепринятый прием исключения влияния фонового вывода на интерактивную работу:
ком_строка>имя_файла.out &
-
ком_строка планирует задание для фонового режима
-
перенаправляет вывод вместо экрана в указанный файл головного каталога пользователя.
Пример: Запуск программы, осуществляющей поиск файлов по шаблону «ааа*», в фоновом режиме, результаты поиска перенаправляются в файл grep.out:
$grep ааа* > grep.out &
194
$ps
PID TTY TIME CMD
194 tty5 0:02 grep
200 tty5 0:01 ps
В оболочке bash имеются две встроенные команды, которые служат для перевода процессов на передний план или возврата их в фоновый режим. Но прежде, чем рассказывать об этих командах, надо рассказать о команде jobs. Она всегда вызывается без аргументов и показывает задания, запущенные из текущего экземпляра shell. В начале каждой строки вывода этой команды указывается порядковый номер задания в виде числа в квадратных скобках. После номера указывается состояние процесса: stopped (остановлен), running (выполняется) или suspended (приостановлен). В конце строки указывается команда, которая исполняется данным процессом. Один из номеров выполняющихся заданий помечен знаком +, а еще один — знаком -. Процесс, помеченный знаком +, будет по умолчанию считаться аргументом команд fg или bg, если они вызываются без параметров. Процесс, помеченный знаком -, получит знак +, если только завершится по какой-либо причине процесс, который был помечен знаком +.
Команды fg и bg служат для перевода процессов на передний план или возврата их в фоновый режим. В качестве аргумента обеим этим командам передаются номера тех заданий, которые присутствуют в выводе команды jobs. Если аргументы отсутствуют, то подразумевается задание, помеченное знаком +. Команда fg переводит указанный в аргументе процесс на передний план, а команда bg — переводит процесс в фоновый режим. Одной командой bg можно перевести в фоновый режим сразу несколько процессов, а вот возвращать их на передний план необходимо по одному.
Практическая работа №4(1) Команды управления процессами. Создание фоновых процессов
Цель работы:
-
Закрепить представление о возможностях командного языка UNIX по управлению процессами, которым выделяются все необходимые ресурсы вычислительной системы
-
Научиться запускать на выполнение фоновые процессы и процессы переднего плана, получать моментальный снимок процессов в системе.
Порядок выполнения работы
Изучаются команды:
ps - запрос информации о процессах текущего терминала;
top получение информации о "состоянии процессов в режиме реального времени;
& - запуск фонового процесса;
jobs - запрос листинга списка заданий;
bg - перевод оперативного в фоновый режим;
fg перевод фонового процесса в оперативный.
-
Зарегистрируйтесь в ОС Linux. Запустите на выполнение программу Терминал.
-
Выведите на экран Терминала справку по следующим командам: ps, top, jobs, bg, fg. Назначение и формат команд приведите в отчете.
-
Выведите на экран листинг характеристик (в длинном и коротком форматах) процессов, инициализированных с Вашего терминала. Проанализируйте и объясните содержание каждого поля сообщения
-
Запустите утилиту получения информации о процессах в режиме реального времени. Проанализируйте и объясните содержание каждого поля сообщения
-
Запустите простейшую процедуру в фоновом режиме с бесконечным циклом выполнения, предусматривающую, например процесс, выводящий на экран бесконечный поток символов «y»:
уes &
-
Выведите на экран листинг характеристик (в длинном и коротком форматах) процессов, инициализированных с Вашего терминала. Объясните изменения в листинге характеристик процессов. Объясните содержание PID и PPID. Какой процесс является родительским для запущенной процедуры.
-
Выйдите из системы и войдите заново. Проанализируйте листинг процессов. Объясните изменения в системе.
-
Запустите процесс уes в оперативном режиме с перенаправлением вывода в устройство /dev/null («черная дыра»).
-
Переведите процесс в оперативный режим и проанализируйте сообщение на экране.
-
Приостановите выполнение процесса и переведите его в фоновый режим. Проанализируйте сообщение на экране.
-
Завершите работу всех запущенных вами процессов, переведя их на передний план и нажав клавиши Ctrl+C.
-
Завершите работу с Терминалом.
Практическая работа №4(2) Управление приоритетами процессов. Завершение работы процессов
Цель работы:
-
Закрепить представление о возможностях командного языка UNIX по управлению процессами, которым выделяются все необходимые ресурсы вычислительной системы
-
Научиться осуществлять управление существующими в системе процессами, изменяя их приоритеты и посылая им сигналы управления.
Порядок выполнения работы
Изучаются команды:
nice - понижение приоритета процесса;
kill - посылка сигнала процессу.
-
Зарегистрируйтесь в ОС Linux. Запустите на выполнение программу Терминал.
-
Выведите на экран Терминала справку по следующим командам: nice, kill. Назначение и формат команд приведите в отчете.
-
Запустите процесс уes в оперативном режиме с перенаправлением вывода в устройство /dev/null («черная дыра»).
-
Приостановите выполнение процесса, используя команду kill.
-
Переведите процесс в фоновый режим. Проанализируйте сообщение на экране.
-
Убейте процесс, послав командой kill сигнал завершения процесса.
-
Запустите процесс поиска директорий в корневом каталоге в фоновом режиме (выводимые данные перенаправьте в файл или «черную дыру»).
-
Выведите на экран листинг характеристик (в длинном формате) процессов, инициализированных с Вашего терминала. Каково значение приоритета запущенного процесса? Какой процесс является родительским для запущенной процедуры.
-
Понизьте значение приоритета процедуры поиска. На что и как повлияет эта операция при управлением вычислительным процессом системы? Как отразятся её результаты в описателях процессов?
-
Убейте все созданные ранее процессы и завершите работу с Терминалом.
Контрольные вопросы:
-
Объясните понятия процесса и ресурса. Какое их значение в организации вычислительного процесса в ОС UNIX?
-
Какая информация содержится в описателях процессов? Как просмотреть их содержание в процессе работы с системой?
-
Какими способами можно организовать выполнение программ в фоновом режиме?
-
Какие особенности выполнения программ в фоновом режиме? Как избежать вывода фоновых сообщений на экран и прерывания выполнения фоновых программ при прекращении сеанса работы с системой?
-
Как пользователь может повлиять на распределение ресурсов между активными процессами?
-
Как можно прервать выполнение активных процессов? Какая информация для этого необходима и откуда она извлекается?
Тема 2.3. Права доступа к файлам и каталогам
2.3.1. Команды управления правами доступа
Каждый файл принадлежит конкретному пользователю. Владелец файла имеет абсолютный контроль над теми, кто из пользователей системы может иметь доступ к файлу. Владельцу предоставлены средства командного языка, позволяющими разрешать или запрещать доступ к своим файлам и каталогам.
Права процессов пользователей при доступе к файлу кодируются в атрибутах защиты файла. Атрибуты сопровождают каждый файл, хранятся в описателях файлов, на которые в каталоге имеются ссылки, и доступны для анализа и изменения посредством специальных команд ОС UNIX. Атрибуты защиты файла определяют права доступа трем видам процессов: процессам пользов ателя - владельца файла (u - user), процессам группы владельца файла (g - group) и процессам остальных пользователей (o - other), не попавших ни в одну из двух предыдущих категорий. Код атрибутов прав доступа пользователей трех перечисленных категорий для каждого файла отображается в полном листинге каталога символьным кодом в виде комбинации следующих символов:
r - разрешение на чтение или на выполнение файла, для каталога - просмотр содержимого каталога (список всех файлов);















