Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
оси_лабы_методички.doc
Скачиваний:
16
Добавлен:
10.11.2018
Размер:
418.3 Кб
Скачать

3.5. Команды работы с процессами

 

& - запуск процесса как фонового (параллельного):

$ имя_процесса [-ключи] [параметры] &

При выполнении этой команды следующее приглашение ОС появится сразу же после запуска процесса (не дожидаясь его завершения). Фоновый процесс не допускает ввода с клавиатуры и выводит сообщения на экран, нарушая целостность ввода и вывода привилегированного процесса.

 

nohup - корректный запуск процесса как фонового:

$ nohup имя_процесса [-ключи] [параметры]

Эта команда перенаправляет поток вывода фонового процесса в файл nohup.out.

 

ps - получить список всех процессов:

$ ps [-ключи]

При отсутствии ключей будет выведен список процессов самого пользователя (идентификатор процесса, номер терминала и время процессора, затраченное на процесс). Ключи:

-e - вывод информации обо всех процессах в системе;

-a - вывод информации о процессах, связанных с данным терминалом;

-l - вывод информации в длинном формате.

 

kill - послать сигнал процессу:

$ kill -номер_сигнала идентификатор_процесса

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

 

4. Интерпретатор shell

 

Интерпретатор SHELL является оболочкой над всей операционной системой и выполняет интерфейсные функции между пользователем и ОС. Он перехватывает и интерпретирует все команды пользователя: формирует и выводит ответные сообщения.

Помимо запуска на выполнение стандартных команд UNIX и исполняемых файлов, интерпретатор включает собственный язык, который по своим возможностям приближается к высокоуровневым языкам программирования. Этот язык позволяет создавать программы, которые могут включать операторы языка и команды UNIX. Такие файлы не требуют компиляции и выполняются в режиме интерпретации, но они должны обладать правом на исполнение (устанавливается с помощью команды chmod).

Процедуре shell могут быть переданы аргументы при запуске. Каждому из первых девяти аргументов ставится в соответствие позиционный параметр от $1 до $9 ($0 - имя самой процедуры), и по этим именам к ним можно обращаться из текста процедуры.

Прежде, чем начать рассмотрение некоторых операторов shell, .следует обратить внимание на использование в командах некоторых символов.

 

\ знак отмены специального символа перевода строки, следующего непосредственно вслед за этим знаком.

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

“” двойные кавычки, используются для обрамления текста, содержащего имена переменных для подстановки ($имя) или стандартные команды, заключенные в символы тупого ударения (`команда`).

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

 

echo вывод сообщений.

 

Пример. Вывод на экран содержимого текущего каталога.

echo “Текущий каталог: \

`pwd` \

`ls`”

Будет выведено:

Текущий каталог: имя_каталога

файл_1

файл_2

. . . . . .

 

Переменные языка shell

Язык shell позволяет работать с переменными (без предварительного объявления). Имена переменных начинаются с буквы и могут включать буквы и цифры. Обращение к переменным начинается со знака $.

 

Пример. Переход к начальному каталогу пользователя.

cd $HOME

 

Оператор присваивания

Присвоение значений переменным осуществляется с помощью оператора ‘=’ без пробелов.

Пример. s=Hello

echo $s

 Вычисление выражений

Осуществляется с помощью команды expr и операторов:

арифметических логических

+ сложение = равно

- вычитание !- не равно

\* умножение \< меньше

/ деление \<= меньше или равно

% остаток от деления \> больше

\>= больше или равно

Результат операций сравнения - вывод 1 (true) или 0 (false). Все операторы и имена переменных должны отделяться друг от друга пробелами.

 

Пример.

a=5 b=12

a=’expr $a + 4’

d=’expr $b - $a’

echo $a $b $d

Будет выведено:

9 12 3

 

Условные выражения

Ветвление вычислительного процесса осуществляется с помощью оператора if:

if список_команд1

then список_команд2

[else список_команд3]

fi

Список_команд - это одна или несколько команд (для задания пустого списка используется двоеточие - ‘:’). Список_команд1 предает оператору if код возврата последней команды из списка. Если он равен 0, то выполняются команды из списка_команд2, таким образом нулевой код возврата эквивалентен значению «истина». В противном случае выполняются команды из списка_команд3, если он существует.

Проверка условия может осуществляется с помощью команды test. Аргументами этой команды могут быть имена файлов, числовые и нечисловые строки. Она используется в следующих режимах:

  • проверка файлов: test -ключ имя_файла

Ключи: -r файл существует и доступен для чтения;

-w файл существует и доступен для записи;

-x файл существует и доступен для исполнения;

-f файл существует и имеет тип ‘-‘, т.е. это обычный файл;

-s файл существует, имеет тип ‘-‘ и не пуст;

-d файл существует и имеет тип ‘d‘, т.е. это каталог.

  • сравнение чисел: test число1 -ключ число2

Ключи: -eq равно;

-ne не равно;

-lt меньше;

-le меньше или равно;

-gt больше

-ge больше или равно.

  • сравнение строк:

test [-n] строка строка непуста;

test -z строка строка пуста;

test строка1 = строка2 строки равны;

test строка1 != строка2 строки не равны.

 

Построение циклов

В языке shell есть три типа циклов: while, until и for.

  • цикл while:

while список_команд1{;|перевод строки}

do список_команд2{;|перевод строки}

done

 

В условии учитывается код возврата последней выполненной команды из списка_команд1, при этом 0 интерпретируется как «истина».

 

  • цикл until:

until список_команд1{;|перевод строки}

do список_команд2{;|перевод строки}

done

 

Проверка условия выполняется перед выполнением цикла. Учитывается код возврата последней выполненной команды из списка_команд1, при этом цикл выполняется до тех пор, пока код возврата не примет значение «истина».

 

  • цикл for:

for переменная [in список_значений]{;|перевод строки}

do список_команд{;|перевод строки}

done

 

Переменной присваивается значение очередного слова из списка_значений и для этого значения выполняется список_команд. Количество итераций равно количеству цепочек символов в списке_значений, разделенных пробелами. Если слово in и список_значений опущены как необязательные, то переменной поочередно присваиваются значения параметров, переданных при запуске данной программы. В качестве списка можно использовать шаблоны имен файлов, тогда интерпретатор превращает этот шаблон в требуемый синтаксисом список имен файлов, удовлетворяющий шаблону.

 

Пример. Печать списка имен текстовых файлов из текущего каталога.

list=`ls *.txt`

for val in $list

do

echo «$val»

done