А.П. Строляров, И.Г. Головин, И.А. Волкова - Операционная система Unix (1114677), страница 4
Текст из файла (страница 4)
Поэтому, чтобы просмотреть постранично сообщения, выдаваемые в ходе компиляции, следуетдать, например, такую команду:gcc -Wall -g myprog.c -o myprog 2>&1 | less2.6ПроцессыСписок процессов, выполняющихся в настоящий момент, можно получить командой ps:$ psPID TTY2199 pts/52241 pts/5TIME CMD00:00:00 bash00:00:00 psКак видно, команда по умолчанию выдаёт только список процессов,запущенных в данном конкретном сеансе работы.К сожалению, опции команды ps очень сильно отличаются в зависимости от версии (в частности, для FreeBSD и Linux).
За подробнойинформацией следует обращаться к документации по данной конкретной ОС; здесь мы ограничимся замечанием, что команда ps ax выдастсписок всех существующих процессов, а команда ps axu дополнительновыдаст информацию о владельцах процессов5 .В некоторых случаях может оказаться полезной программа top, работающая интерактивно. Она выдаёт на экран список наиболее активных процессов, обновляя его один раз в секунду.
Чтобы выйти из программы top, необходимо ввести букву q.Снять процесс можно с помощью сигнала. Обычно применяют сначала сигнал SIGTERM (15), а если после этого процесс не завершился –сигнал SIGKILL (9). Сигнал SIGTERM может быть перехвачен программой, например, с целью корректного завершения; сигнал SIGKILL уничтожает процесс безусловным образом, не оставляя возможности произведения каких-либо действий по подготовке к корректному завершению.5 Это верно для ОС Linux и FreeBSD.
В других ОС, например в SunOS/Solaris,опции команды ps имеют совершенно иной смысл19Для передачи сигнала процессу используется команда kill. Поумолчанию передаётся сигнал SIGTERM, т.е., например, командаkill 2763 приведёт к тому, что процесс 2763 получит сигнал SIGTERM.Задать другой сигнал можно либо по номеру, либо по названию (TERM,KILL и т.п.). Следующие две команды эквивалентны; обе передают процессу 2763 сигнал SIGKILL:kill -9 2763kill -KILL 27632.7Выполнение в фоновом режимеНекоторые программы выполняются ощутимое время, при этом нетребуя взаимодействия с пользователем через стандартные потоки ввода/вывода.
Во время выполнения таких программ удобно иметь возможность продолжать давать команды командному интерпретатору,чтобы не тратить время.Допустим, нам потребовался список всех файлов в файловой системе. Такой список можно получить с помощью команды ls -lR /.Естественно было бы перенаправить её вывод в файл, чтобы позднееиметь возможность его анализа.
Заметим, что такая команда будет выполняться несколько минут и ждать её окончания нам бы не хотелось,поскольку эти несколько минут мы могли бы, например, использоватьдля набора текста в редакторе. Чтобы запустить команду в фоновомрежиме, к ней следует в конце приписать символ &, например:$ ls -lR / >list.txt 2>/dev/null &[1] 2437Здесь мы перенаправили поток вывода сообщений об ошибках в устройство /dev/null6 , чтобы сообщения о невозможности чтения некоторыхкаталогов не мешали нашей дальнейшей работе.В ответ на нашу команду система сообщает, что задание запущенов фоновом режиме в качестве фоновой задачи №1, причем номер запущенного процесса – 2437. Текущий список выполняемых фоновых задачможно узнать командой jobs:$ jobs[1]+ Runningls -lR / >list.txt 2>/dev/null &6 Устройство /dev/null предназначено для поглощения потоков данных, которыенам не нужны; в него можно записывать что угодно, данные при этом попростуисчезают20По окончании выполнения задачи командный интерпретатор нам обэтом сообщит.
В случае успешного завершения сообщение будет выглядеть так:[1]+Donels -lR / >list.txt 2>/dev/null &В случае, если программа завершилась с кодом, отличным от нуля, сообщение будет иметь другой вид:[1]+Exit 1ls -lR / >list.txt 2>/dev/null &Наконец, если фоновый процесс снять сигналом, сообщение будет примерно таким (для сигнала SIGTERM):[1]+Terminatedls -lR / >list.txt 2>/dev/null &При отправлении сигналов процессам, являющимся фоновыми задачами данного конкретного экземпляра командного интерпретатора,можно ссылаться на номера процессов по номерам фоновых задач,добавляя к номеру символ %.
Так, команда kill %2 отправит сигналSIGTERM второй фоновой задаче. Символ % без указания номера обозначает последнюю из фоновых задач.Если задача уже запущена не в фоновом режиме и нам не хочется ждать её завершения, мы можем сделать обычную задачу фоновой.Для этого следует нажать Ctrl-Z, в результате чего выполнение текущей задачи будет приостановлено. Затем с помощью команды bg7 приостановленную задачу можно снова поставить на выполнение, но уже вфоновом режиме.Также возможно сделать текущей (т.е. такой, окончания которойожидает командный интерпретатор) любую из фоновых и приостановленных задач. Это делается с помощью команды fg8 .2.8Электронная документацияДистрибутивы ОС Unix обычно содержат большое количество документации, доступ к которой можно получить непосредственно в процессе работы. Большая часть такой документации оформлена в видефайлов, отображаемых с помощью традиционной команды man, либо спомощью более современной программы info.7 От8 Отанглийского background – фонанглийского foreground212.8.1Команда manКоманда man служит для поиска и отображения установленной всистеме справочной информации.
Справочник охватывает команды ОСUnix, системные вызовы, библиотечные функции языка C (и другихустановленных в системе языков), форматы файлов, некоторые общиепонятия и т.д.К примеру, если вы хотите узнать все опции команды ls, следуетдать команду$ man lsа если вы, допустим, забыли, в каком порядке идут аргументы системного вызова waitpid(), вам поможет$ man waitpidПрограмма man найдет соответствующий документ в системном справочнике и запустит программу его отображения. Появившийся наэкране документ можно листать с помощью клавиш «стрелка вверх»и «стрелка вниз», можно использовать клавишу «пробел», чтобы пропустить сразу страницу текста.
Выход из просмотра справочного документа осуществляется клавишей q (от слова quit).Если нужный вам справочный документ имеет большой объем, а вамнеобходимо найти в нем определенное место, может оказаться удобнымпоиск подстроки. Это делается вводом символа /, после которого следует набрать строку для поиска и нажать Enter. Повторный поиск той жестроки осуществляется вводом / и нажатием Enter (то есть саму строку можно опустить). Чтобы выполнить поиск в обратном направлении,можно воспользоваться символом ? вместо /.В некоторых случаях системный справочник может содержать болееодного документа с данным именем.
Так, в системе существует командаwrite и системный вызов write. Команда write вам вряд ли понадобится, так что, если вы набрали man write, скорее всего, вы имели ввиду системный вызов; к сожалению, система этого не знает и выдаствам совсем не тот документ, который вам нужен.Эту проблему можно решить указанием номера секции системногосправочника. Так, в нашем примере команда$ man 2 writeвыдаст именно документ, посвященный системному вызову write, поскольку секция №2 содержит справочные документы по системным вызовам. Перечислим другие секции системного справочника:22• 1 – пользовательские команды ОС Unix (такие команды, как ls,rm, mv и т.п. описываются в этой секции)• 2 – системные вызовы ядра ОС Unix• 3 – библиотечные функции языка C (к этой секции можно обратиться, например, за информацией о функции sprintf)• 4 – описания файлов устройств• 5 – описания форматов системных конфигурационных файлов• 6 – игровые программы• 7 – общие понятия (например, man 7 ip выдаст полезную информацию о программированием с использованием TCP/IP)• 8 – команды системного администрирования ОС Unix (например,в этой секции вы найдете описание команды mount, предназначенной для монтирования файловых систем).Система может содержать и другие секции, причем не обязательно обозначающиеся цифрой; так, при установке в системе интерпретатораязыка Tcl его справочные страницы обычно оформляются в отдельнуюсекцию, которая может называться “n”, “3n” и т.п.2.8.2Команда infoЕсли команда man служит для отображения отдельных документов,то команда info позволяет осуществлять просмотр целых наборов страниц, связанных между собой гиперссылками; иначе говоря, документыв формате info представляют собой гипертекст, а сама команда – браузер (просмотрщик) гипертекста, работающий в текстовом режиме.Система info часто содержит более подробную информацию о томже предмете, чем man.
Так, man make выдаст довольно скудную информацию об опциях командной строки команды make, в то время какinfo make позволит основательно изучить работу с программой make(см. §4.3), научиться составлять ее входные файлы и т.д.При работе с программой info можно пролистывать текст клавишами стрелок и пробелом.
Клавиши n и p позволяют перейти, соответственно, к следующей и предыдущей странице гипертекста. Гиперссылки в тексте заключены между знаком * и ::, например:* Reading Makefiles::How makefiles are parsedЕсли позиционировать курсор на словах Reading Makefiles и нажатьEnter, произойдет переход по данной гиперссылке. Если необходимо перейти назад, можно воспользоваться клавишей l (от слова last).Выход из программы info производится по клавише q (от слова quit)или нажатием Ctrl-C.232.92.9.1Дополнительные возможностиКомандные файлы в Bourne ShellИнтерпретатор Bourne Shell позволяет осуществлять не только работу в режиме диалога с пользователем, но и выполнение программ,называемых командными файлами (скриптами).
Файл с программой,предназначенной для исполнения интерпретатором Bourne Shell, должен начинаться со строки#!/bin/shПеременные в языке Bourne Shell имеют имена, состоящие из латинских букв, цифр, знака подчеркивания и начинающиеся всегда с буквы. Значением переменной может быть любая строка символов. Чтобыприсвоить переменной значение, необходимо написать оператор присваивания, например:I=10MYFILE=/tmp/the_file_nameMYSTRING="Here are several words"Обратите внимание, что в имени переменной, а также вокруг знака равенства (символа присваивания) не должно быть пробелов, в противномслучае команда будет расценена не как присваивание, а как обычнаякоманда, в которой знак присваивания – один из параметров.Для обращения к переменной используется знак $, например:echo $I $MYFILE $MYSTRINGВ результате выполнения этой команды будет напечатано:10 /tmp/the_file_name Here are several wordsПри необходимости скомпоновать слитный текст из значений переменных можно имена переменных заключать в фигурные скобки, например:echo ${I}abcЭта команда напечатает:10abcДля выполнения арифметических действий используется конструкция $(( )).