Помощничек
Главная | Обратная связь


Археология
Архитектура
Астрономия
Аудит
Биология
Ботаника
Бухгалтерский учёт
Войное дело
Генетика
География
Геология
Дизайн
Искусство
История
Кино
Кулинария
Культура
Литература
Математика
Медицина
Металлургия
Мифология
Музыка
Психология
Религия
Спорт
Строительство
Техника
Транспорт
Туризм
Усадьба
Физика
Фотография
Химия
Экология
Электричество
Электроника
Энергетика

Команды управления процессами



 

В UNIX процесс — это программа, которая обладает собственным адресным пространством. Обычно команда или сценарий, которые вы можете выполнить, состоят из одного или нескольких процессов. С простыми командами, подобными wc,ассоциируются только единичные процессы, тогда как со строкой команд, соединенных каналами, ассоциируются многие процессы.

Процессы можно разделить на следующие большие группы:

• Интерактивные процессы — процессы, которые взаимодействуют с терминалом. Интерактивные про­цессы можно также выполнять в фоновом режиме. В последнем случае ввод принимается из стандар­тного ввода, вывод отображается в стандартный вывод и сообщения об ошибках отображаются в стандартный вывод сообщений об ошибках. При выполнении процесса в фоновом режиме терминал отключается от процесса и может использоваться для выполнения других команд. Существует воз­можность перемещать процесс из фона в интерактивный режим и наоборот.

• Пакетные процессы не запускаются с терминалов. Они направляются в очередь заданий для последовательного выполнения.

• Демоны представляют собой бесконечные процессы, которые ожидают запросов от других процес­сов, чтобы обслужить их.

В UNIX каждый процесс имеет несколько связанных с ним атрибутов. Ниже приведен список несколь­ких таких атрибутов:

• Идентификатор процесса (Process ID) представляет собой уникальное число, присваиваемое каж­дому процессу.

• Реальный идентификатор пользователя (Real User ID) представляет собой идентификатор того пользо­вателя, который инициализировал процесс.

• Эффективный идентификатор пользователя (Effective User ID) представляет собой идентификатор пользователя, связанного с процессом. Он определяет доступ процесса к системным ресурсам. При нормальных обстоятельствах Real User ID и Effective User ID — это одно и то же. Но эффективный идентификатор пользователя может отличаться от реального идентификатора пользователя. Для это­го устанавливается флаг Set User ID выполняемой программы. Установка делается тогда, когда вы хотите, чтобы программа выполнялась с особыми привилегиями, но привилегии пользователя оста­вались бы прежними.

• Реальный идентификатор группы (Real Group ID) представляет собой идентификатор группы пользо­вателя, который инициализировал процесс,

• Эффективный идентификатор группы (Effective Group ID) представляет собой идентификатор группы, который определяет права доступа. Эффективный идентификатор группы похож на эффективный идентификатор пользователя.

• Приоритет (Nice Number) представляет собой число, связанное с процессом, и характеризующее его важность по отношению к другим процессам, выполняющимся в системе.

 

Kill

Команда killиспользуется для посылки сигналов выполняющемуся процессу. Чтобы процессу можно было послать сигнал с помощью данной команды, он не должен находиться в интерактивном режиме.

По умолчанию действие команды состоит в прекращении процесса. Однако возможно, что процесс запрограммирован на прием такого сигнала. Тогда процесс будет обрабатывать сигнал в соответствии с заложенной в него программой. Вы можете убивать только процессы, которые инициированы вами. Приви­легированный пользователь может убить любой процесс в системе.

Флаги, связанные с командой kill,таковы:

• -l предназначен для получения списка всех номеров сигналов и их названий, которые поддержива­ются системой.

• -signal_number представляет собой номер сигнала, посылаемого процессу. Вместо номера можно также использовать название сигнала. Самый сильный сигнал, который можно послать процессу, — это 9 или kill.

Аргументом команды killявляется идентификатор процесса (Process ID) (PID). Для уничтожения не­скольких процессов допустимо указать более одного PID. PID принимает одно из следующих значений:

• PID, больший нуля, — для уничтожения указанных процессов.

• PID, равный нулю, — для уничтожения всех процессов, у которых группа ID процесса соответству­ет группе ID процесса пользователя, запустившего команду kill.

• PID, равный -1, — для уничтожения всех процессов с эффективным User ID пользователя, запу­стившего команду kill.

• PID, равный отрицательному числу, но не -1, — для уничтожения процессов, PID которых равен абсолютному значению указанного числа.

Пример. Если вы выполняете команду в фоновом режиме и думаете, что она зациклилась, то можете ее снять. Например, если номер процесса 2060, то выполните следующую команду:

kill 2060

Если, по какой-либо причине, команда не убьет процесс, то используйте более сильный вариант:

kill -kill 2060 (то же самое,что kill -9 2060)

Если вы хотите убить все принадлежащие вам процессы, то выполните следующую команду:

kill -kill 0

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

 

ps

Команда psиспользуется для вывода списка текущих выполняемых процессов. В зависимости от опций, вы можете найти все процессы или только те из них, которым соответствует ваш идентификатор пользо­вателя. Данная команда отображает все сведения о различных фоновых и пакетных процессах, выполняю­щихся в системе. Команда может предоставить информацию только об активных процессах.

При выполнении команды psбез флагов и аргументов она выводит список всех процессов (если они есть), инициированных с текущего терминала.

Далее следует список нескольких флагов, которые определяют, какие процессы будут перечислены командой ps.

• -А для вывода информации обо всех процессах, выполняющихся в системе

• -е для подробностях о всех процессах, за исключением процессов ядра

• -k для перечисления всех процессов ядра UNIX

• -рlist для вывода сведений обо всех процессах, указанных в списке

• -tlist для вывода сведений обо всех процессах, инициированных терминалами, указанными в списке

• -Ulist (-u list) для вывода сведений обо всех процессах, инициированных пользователями, указан­ными в списке

• а для вывода сведений обо всех процессах, которые имеют ассоциированные с ними терминалы

• g для вывода сведений обо всех процессах

• х для вывода сведений обо всех процессах, которые не имеют ассоциированных терминалов

Ниже идет перечень нескольких флагов команды ps,которые определяют, какие сведения отображают­ся для каждого перечисляемого процесса:

• -l для генерации списка в расширенной форме

• -f для генерации полного листинга

• -Fformat для генерации форматированного вывода

Примечание. Некоторым флагам, используемым в команде ps, не предшествует знак переноса (-).

Если флаги не используются, то выводятся следующие сведения

• Идентификатор процесса.

• Идентификатор терминала, связанного с процессом. Перенос (-) отображается, если связанного тер­минала нет.

• Время ЦПУ, потребляемое процессом.

• Команда, выполняющаяся как часть процесса.

С помощью команд форматирования можно получить следующую информацию:

• Идентификатор пользователя, инициировавшего процесс

• Идентификатор процесса.

• Идентификатор родительского процесса

• Использование ЦПУ процессом.

• Время начала процесса. Если процесс начался в тот же день, то отображается время, в противном случае выводится только дата.

• Идентификатор терминала, связанного с процессом. Перенос (-) выводится, если терминала, свя­занного с процессом, нет.

• Время ЦПУ, потребляемое процессом.

• Команды, обрабатывающиеся как часть процесса

Пример. Для вывода списка процессов, инициированных текущим пользователем с текущего терминала выпол­ните следующую команду

ps

Вот вывод команды

PID TTY TIME CMD

66874 2 0:00 -ksh

71438 2 0:00 ps

Здесь отображены два процесса. Один — оболочка (Korn), второй процесс принадлежит самой команде ps. Если вам нужно знать больше подробностей, выполните следующую команду:

ps -f

Команда сгенерирует следующий вывод:

USER PTD PPID С STIME TTY TIME CMD

testuser 66874 1 1 22:52:26 2 0:00 -ksh

testuser 48076 66874 6 00:21:33 2 0:00 ps -f

Если вы хотите видеть все процессы, выполняющиеся на терминале tty2,то выполните следующую команду:

ps -f -t tty2

В результате получится

USER FID PPID C STIME TTY TIME CMD

testuser 66874 1 1 22:52:26 2 0:00 -ksh

testuser 73277 66874 6 00:24:17 2 0:00 ps -f -t tty2

Если с процессом не связан никакой терминал, то выводится знак переноса (-). Таким образом, пере­нос можно использовать как имя терминала для получения списка процессов, не связанных с терминала­ми.

Jobs

В UNIX между процессами и заданиями существует едва заметная разница, job(задание) обычно запус­кается из командной строки и может быть командой, сценарием оболочки, цепочкой связанных команд (конвейером). В конвейере каждая команда имеет уникальный идентификатор процесса, но все команды помечены одним и тем же идентификатором задания.

Для перевода задачи из интерактивного в фоновый режим можно воспользоваться сочетанием клавиш
Ctrl-Z.
После этого задание будет выполняться в фоновом режиме.

Оболочка С и некоторые версии оболочек Korn и Bourne предлагают команду jobs. Команду jobsможно использовать для поиска сведений об активных заданиях. После того, как у вас появился идентификатор задания, можно приступать к элементарному управлению заданием.

Для указания того, что вы работаете с номером задания, а не с номером процесса, используется знак процента (%).

Команда fg переводит задание из фонового режима в режим переднего плана.

Пример Если задание номер 5 необходимо перевести из фонового режима в режим переднего плана, то выпол­ните следующую команду:

fg %5

Если использовать 5 вместо %5,то UNIX интерпретирует 5 как идентификатор процесса 5.

Если у вас есть задание под названием sample_job,выполняющееся в фоновом режиме, то выполните команду

jobs

и получите подробные сведения о задании. Вывод будет выглядеть примерно так:

[1] + Running nohup sample_job > sample_log &

Если задействовать опцию -l, то будет отображен и номер процесса:

[1] + 270384 Running nohup sample_job > sample_log &

Для воздействия на задание не нужно знать его номер. Для идентификации задания можно использовать имя задания с предварительным знаком процента (%).Здесь можно использовать и обычные символы замещения.

В предыдущем примере для идентификации задания можно использовать sample_job.UNIX также разре­шает использовать %\? для идентификации уникальной части имени задания. В данном примере это может быть %\?job (обратите внимание на то, что был использован символ \, поскольку ? имеет в UNIX особое значение. Указание \ перед символом приказывает UNIX не интерпретировать данный сим­вол как управляющий).

 

Чтобы удалить задание sample_job,используете команду

kill % sample_job

Для того, чтобы удалить все задания, оканчивающиеся на job, следует выполнить команду:

kill %\?job

 




Поиск по сайту:

©2015-2020 studopedya.ru Все права принадлежат авторам размещенных материалов.