Автор работы: Пользователь скрыл имя, 29 Декабря 2011 в 20:20, курс лекций
Способы организации файловой системы, списки команд и т.д. ОС Unix
Найдите номер процесса свего шелла и отправьте ему сигнал SIGHUP.
Введение
в Unix
Лабораторный практикум
3. Процессы
(продолжение)
Войдите в систему в среде X-Windows. Запустите окно терминала
3.4. Подсистема управления заданиями
Подсистема управления заданиями (jobs) предназначена для интерактивной работы пользователя с шеллом. Если шелл поддерживает эту систему (/usr/bin/jsh, /usr/local/bin/bash), то пользователь получает дополнительные возможности манипулировать запущенными процессами: перемещать их с переднего плана (foreground, интерактивное исполнение) в фоновый режим (background) и обратно, приостанавливать и возобновлять работу процессов. Каждая команда или конвейер, вводимые пользователем с терминала, называются заданиями (job). В терминах процессов задание представляет собой группу процессов. Каждое задание существует в одном из следующих состояний: интерактивное (foreground), фоновое (background) или приостановленное (stopped). Эти термины определяются следующим образом:
Каждое задание, запускаемое шеллом, получает целый положительный номер, который далее отслеживается шеллом и используется как идентификатор конкретного задания. Если вы запускаете некоторый процесс (конвейер) в фоновом режиме, то шелл выводит идентификатор запущенного процесса (группы процессов) и номер задания.
Вдобавок к этому shell отслеживает состояния "текущего" и "предыдущего" заданий. Текущим заданием является задание, запущенное в фоновом режиме или приостановленное из интерактивного состояния последним. Предыдущим заданием является последнее нетекущее задание. Текущее задание помечается в списке заданий плюсом, предыдущее - минусом.
Синтакис указания идентификатора задания имеет вид
%jobid
где идентификатор jobid может быть указан в одном из следующих форматов:
+ | текущее задание |
- | предыдущее задание |
?string | задание, командная строка которого содержит уникальную строку string. |
n | задание номер n |
pref | задание, в котором pref является уникальным префиксом имени команды (например, если команда find / запущена в фоновом режиме, на это задание можно сослаться как %find); pref не может содержать пустых символов, если они не взяты в кавычки. |
При включенной подсистеме управления заданиями в целях манипуляции заданиями в пользовательскую среду добавляются следующие команды:
%bg % [jobid]
Восстанавливает выполнение приостановленного задания, переводя его в фоновый режим. Если идентификатор задания %jobid опущен, то команда относится к текущему заданию.
%fg % [jobid]
Восстанавливает выполнение приостановленного задания, переводя его в интерактивный режим; также переводит задание, выполняющееся в фоновом режиме в интерактивный. Если идентификатор задания %jobid опущен, то команда относится к текущему заданию.
%jobs [-l] % [jobid]
Выводит список заданий, приостановленных или выполняющихся в фоновом режиме. Если указан %jobid, собщает о конкретном задании. С ключом -l (буква "эль") выводит идентификаторы процессов.
%kill [ -СИГНАЛ ] %jobid
Версия команды kill для заданий. Команда посылает процессам указаного задания указанный сигнал, по умолчанию - SIGTERM.
Нажатие комбинации <Ctrl>-Z приостанавливает текущее интерактивное задание.
Запустите указанный ниже процесс, подождите одну-две секунды и введите <Ctrl>-Z.
%vi &
<Ctrl>-Z
%ls -l out
%jobs
%jobs -l
%ls -l out
Cоздайте еще один процесс, также переведя его в приоcтановленное состояние.
%vi &
<Ctrl>-Z
%jobs
%jobs -l
%bg %2
%jobs
Почему задание 2 не запустилось в фоновом режиме, а осталось остановленным?
%fg %2
...
<Ctrl>-Z
%jobs
(запустим первое задание в фоне)
%bg %1
%ls -l out
%ls -l out
(файл растет - задание выполняется)
(чтобы приостановить задание 1, надо сначала перевести его в интерактивный режим)
%fg
<Ctrl>-Z
%jobs
%ls -l out
%ls -l out
(файл не растет)
%kill %?vi
%jobs
%kill %1
%jobs
%rm out
4. Пользователи
Наличие или отсутствие пользователя в системе определяется записью в файле /etc/passwd. Каждая запись представляет собой строку, состоящую из семи полей, разделенных двоеточиями.
%more /etc/passwd
Поля, слева направо, имеют следующие значения:
Если пользователь должен быть членом более одной группы, то для внесения его в другие группы, следует указать имя пользователя в соответствующей строке файла /etc/group.
%more /etc/group
Группа, которая указана для пользователя в файле /etc/passwd называется первичной группой этого пользователя, остальные группы, в которые он внесен согласно файлу /etc/group, - вторичными. Первчичная группа отличается от вторичных только в следующем:
Файл /etc/group таким образом выполняет две функции: во-первых, он определяет имена и идентификаторы групп; во-вторых, указывает участие пользователей во вторичных для них группах.
Чтобы определить, в каких группах вы участвуете, надо подать команду
%groups
После входа пользователя в систему, текущим каталогом для него становится его домашний каталог (указанный в поле HOME в файле /etc/passwd). Перед выводом приглашения командной строки шелл sh выполняет команды, записанный в файле .profile (начинается с точки), находящемся в домашнем каталоге пользователя (bash выполняет файл .bashrc). В этом файле как правило устанавливаются переменные окружения (в первую очередь - переменная PATH) и какие-либо параметры сессии.
%more .profile
Обратите внимание на наличие текущего каталога (".") в списке PATH. Обратите внимание на команду export, которая помечает переменную как "экспортируемую", т.е. перменная будет передаваеться в окуржение дочерних процессов, запускаемых вашим шеллом; иначе она будет видна только внутри процесса шелла.
Рекомендуемое значение переменной PATH:
PATH=/usr/bin:/usr/sbin:/usr/
Изменить переменную PATH "на ходу", добавив в нее еще один путь (в каталог prog, где находится программа hello) можно следующим образом:
%hello
%PATH=$PATH:./prog
%export PATH
%echo $PATH
%hello
(Знак доллара
перед именем переменной
Часто требуется также изменить значение переменной MANPATH, указывающей, где находятся документы справочника man. Если эта переменная не установлена, то man ищет документы в /usr/man, однако программное обеспечение, устанавливаемое в /usr/local, как правило помещает свою документацию в /usr/local/man. Кроме того, язык perl располагает документацию по своим библиотекам внутри /usr/local/lib/perl*. Таким образом, переменная MANPATH, устанавливаемая в .profile, может иметь вид
MANPATH=/usr/man:/usr/local/
export MANPATH
Для корректной работы клавиши <Backspace> (ASCII код 8 или Ctrl-H) может понадобиться установить соответствующий параметр терминала, задающий символ, используемый для стирания предыдущего символа:
stty erase '^H'
Узнать, какие пользователи работают в настоящий момент в системе и чем занимаются, можно с помощью команд
%who
%w
Отправить пользователю почтовое сообщение можно командой mail имя_пользователя. Текст сообщения команда mail берет со своего стандартного ввода.
Отправьте почту сами себе
%mail ваше_имя_пользователя
Subject: hello, me!
Hi, myself!
.
(Признак конца сообщения - строка состоящая из одной точки)
Просмотр почты:
Команды режима просмотра:
d - удалить последнее просмотренное сообщение,
q - выход,
<Enter> - просмотреть следующее сообщение.
Гораздо более
удобным и популярным почтовым клиентом
для Unix является программа pine. Она
имеет встроенную и хорошо написанную
справочную систему (на аглийском языке).
Программа pine написана в Вашингтонском
университете и распространяется свободно
(ftp://ftp.cac.washington.edu/
Если компьютер подключен к Интернет и на нем работает транспортный почтовый агент (как правило, это программа sendmail), то с помощью программы mail (и, конечно, pine) можно отправлять почту в Интернет. Программа mail очень хорошо подходит для отправки коротких текстовых сообщений.