Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Архив2 / курсовая docx525 / Kursovaya_po_OS.docx
Скачиваний:
12
Добавлен:
07.08.2013
Размер:
55.05 Кб
Скачать

6.4. Сигналы

UNIX'ом поддерживаются следующие сигналы:

SIGHUP - 1 - отменить (hangup)

SIGINT - 2 - прерывание (interrupt)

SIGQUIT - 3 - нестандартный выход (quit)

SIGILL - 4 - неверная команда (illegal instruction)

SIGTRAP - 5 - ловушка (trace trap)

SIGFPE - 8 - исключительная ситуация при выполнении операций с плавающей запятой (floating-point exception)

SIGKILL - 9 - уничтожение процесса (kill)

SIGBUS - 10 - ошибка шины (bus error)

SIGSEGV - 11 - нарушение сегментации (segmentation violation)

SIGSYS - 12 - неверный системный вызов (bad argument to system call)

SIGPIPE - 13 - запись в канал без чтения из него (write on a pipe with no one to read it)

SIGALRM - 14 - будильник (alarm clock)

SIGTERM - 15 - программное завершение процесса (software termination signal)

Сигналы SIGINT и SIGQUIT игнорируются, если команда была запущена асинхронно. Иначе сигналы обрабатываются так же, как в процессе-предке, за исключением сигнала SIGSEGV.

6.5. Замечания

При выполнении команд запоминается их местонахождение. Поэтому при создании команды с тем же именем, но находящейся в другой директории, все равно будет выполняться старая команда (если вызов происходит по короткому имени). Для исправления ситуации воспользуйтесь командой hash с ключом -r.

Если вы переименовали текущую или вышележащую директорию, то команда pwd может давать неверную информацию. Для исправления ситуации воспользуйтесь командой cd с полным именем директории.

7.Число генерируемых процессов.

Когда выполняется большое число коротких команд, то действи-

тельное время выполнения может быть значительно увеличено за счет

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

буются значительные количества таких процессов, как правило явля-

ются процедуры, в которых выполняется много циклов и которые ге-

нерируют командные последовательности, которые должны интерпрети-

роваться другим Shell.

Если вас беспокоит эффективность выполнения, вам надо знать,

какие команды являются встроенными в Shell, а какие нет. Ниже

приводится список всех встроенных команд:

break, case, cd, continue, echo, eval, exec, exit, export, for, if, read,

readonly, return, set, shift, test, times, trap, umask, until,

wait, while, ., :, {}

Обычные скобки () также являются встроенной командой, но ко-

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

Shell разветвляется. Все остальные команды, не указанные в спис-

ке, являются внешними (требуют fork и exec).

Пользователь должен всегда хотя бы приблизительно знать число

процессов, генерируемых процедурой. Для всех приведенных ранее

процедур число генерируемых (не обязательно одновременно) процес-

сов может быть оценено по формуле:

число процессов = (k*n) + c

где k и с - это константы, а n может быть количеством аргументов

процедуры, количеством строк во входном файле, количеством файлов

в каталоге и т.п. Повышение эффективности обычно достигается за

счет уменьшения константы k.

В качестве примера проанализируем процедуру с именем split,

чей текст проведен ниже:

:

# split

trap 'rm temp$$; trap 0; exit' 0 1 2 3 15

start1=0 start2=0

b='[A-Za-z]'

cat > temp$$

# read stdin into temp file

# save original lengths of $1,$2

if test -s "$1"

then start1=`wc -l < $1`

fi

if test -s "$2"

then start2=`wc -l < $2`

fi

grep "$b" temp$$ >> $1

# lines with letters onto $1

grep -v "$b" temp$$ | grep '[0-9]' >> $2

# lines without letters onto $2

total=" `wc -l< temp$$` "

end1=" `wc -l< $1` "

end2=" `wc -l< $2` "

lost=" `expr $total - \($end1 - $start1\)\

- \($end2 - $start2\)` "

echo "$total read, $lost thrown away"

Для каждой итерации в цикле имеется одна команда expr и либо

команда echo или другая команда expr. Еще одна дополнительная ко-

манда echo выполняется в конце процедуры. Если n - число строк на

вводе, то количество процессов равно 2*n+1.

Некоторые разновидности процедур не следует писать на

Shell'е. Так, например, если с каждым символом файла связан один

или несколько процессов, хорошим решением будет перенос процедуры

на язык Си. Shell-процедуры не следует использовать для посим-

вольного сканирования или посимвольного формирования файлов.

Соседние файлы в папке курсовая docx525