Приемы профессиональной работы в UNIX



             

УПРАВЛЕНИЕ ВРЕМЕНЕМ - часть 5


| | Mon Mar 31 06:54:25 PST 1986 | |

Поскольку это строка фиксированного размера, мы можем посчитать номера позиций, в которых размещены час и минута. Данные час:минута находятся в позициях 12-16. Для получения этих символов мы запускаем команду date, пропускаем ее результат по конвейеру через cut и вырезаем нужные позиции. Весь результат присваивается переменной TIME. Заметим, что поле секунд не используется. Наименьшая единица времени в этой программе - минута.

Все волшебство данной команды заключено в строках 16-20. Если время, указанное в командной строке, равно текущему времени (строка 16), вычислить и выполнить остальные аргументы командной строки (строка 17), затем выйти с успешным нулевым значением (строка 18). Если время не совпало, немного поспать (строка 19) и повторить все сначала. Символ & в конце цикла в строке 21 превращает весь цикл while в фоновый процесс. Как мы можем убедиться, что shell выполняет все свои команды в фоновом режиме и никакие из них не выполняет в оперативном режиме? В действительности мы не можем этого сделать. Мы должны полагать, что shell так работает. Поскольку многое при программировании на shell делается исходя из опыта и интуиции, вам приходится испытывать многие вещи, чтобы увидеть, как они работают. Периодически shell преподносит сюрпризы и делает нечто совершенно неожиданное.

ИССЛЕДОВАНИЯ

Что бы случилось, если бы вы поставили задание at в фоновый режим, а затем вышли из системы? Ответ зависит от того, с каким shell вы работаете. Если у вас Bourne shell, то ввод команды control-D при выходе из системы прекращает выполнение всех ваших фоновых задач. Единственный способ оставить в живых фоновые задачи после выхода из системы - использовать команду nohup ("no hang up" - "не казнить").

Nohup обеспечивает, что все сигналы о прекращении процесса не достигают данного процесса. Не получая сигнал о прекращении выполнения, процесс думает, что вы все еще находитесь в системе. Синтаксис выглядит так:

nohup at 13:00 echo "back from lunch yet?"




Содержание  Назад  Вперед