Пример: простое управление задачами

Пример: простое управление задачами

Оболочки UNIX предоставляют команды, позволяющие выполнять процессы в фоновом режиме и получать их текущее состояние. В этом разделе разрабатывается простой "процессор задач" ("job shell") с аналогичным набором команд, перечень которых приводится ниже.

• jobbg — использует остальную часть командной строки в качестве командной строки для нового процесса, или задачи (job), однако возврат из команды осуществляется немедленно, без ожидания завершения нового процесса. По желанию пользователя новый процесс может либо получить собственную консоль, либо выполняться как отсоединенный (detached) процесс, то есть как процесс, связь с которым не поддерживается. Этот подход аналогичен запуску команд UNIX с указанием опции & в конце команды.

• jobs — выводит список текущих активных задач, снабжая каждую из задач порядковым номером и идентификатором процесса. Эта команда аналогична одноименной команде UNIX.

• kill — прекращает выполнение задачи. В данной реализации используется функция TerminateProcess, которая, как ранее уже отмечалось, не обеспечивает корректного завершения задачи, сопровождающегося "уборкой мусора". Доступна также опция, позволяющая передавать управляющие сигналы консоли.

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

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

Реализация программы наталкивается на определенные проблемы, связанные с параллельным выполнением задач. Некоторые процессы, запущенные из командных строк различных оболочек, могут одновременно пытаться управлять задачами. Чтобы справиться с этим, функции управления задачами используют блокировки (глава 3) в файле списка задач, в результате чего пользователь может активизировать управление задачами из различных оболочек или процессов.

В полном варианте программы, находящемся на Web-сайте книги, содержится ряд дополнительных возможностей, не представленных в приводимых листингах, например, возможность получения входных данных для командной строки из файла. Программа JobDhell послужит основой для создания более общего "процессора служб" ("service processor") в главе 13 (программа 13.3). Службы NT являются фоновыми процессами, обычно — серверами, управление которыми осуществляется командами запуска, остановки, приостановки, а также другими командами. 

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

5.2. Связь между задачами

Из книги ИНФОРМАЦИОННАЯ ТЕХНОЛОГИЯ. РУКОВОДСТВО ПО УПРАВЛЕНИЮ ДОКУМЕНТИРОВАНИЕМ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ автора Автор неизвестен

5.2. Связь между задачами Большинство проектов разработки программного обеспечения разделяется на задачи, зачастую выполняемые различными группами.В типовом варианте:специалисты в предметной области начинают проект;аналитики формулируют требования к


20.3.5. Конструкция системы управления задачами была плохо реализована

Из книги Искусство программирования для Unix автора Реймонд Эрик Стивен

20.3.5. Конструкция системы управления задачами была плохо реализована Не считая возможности приостанавливать процессы (что само по себе является тривиальным дополнением к планировщику, который мог бы быть сделан довольно безопасно), управление задачами предусмотрено


20.3.5. Конструкция системы управления задачами была плохо реализована

Из книги Искусство программирования для Unix автора Реймонд Эрик Стивен

20.3.5. Конструкция системы управления задачами была плохо реализована Не считая возможности приостанавливать процессы (что само по себе является тривиальным дополнением к планировщику, который мог бы быть сделан довольно безопасно), управление задачами предусмотрено


Пример: простое последовательное копирование файла

Из книги Системное программирование в среде Windows автора Харт Джонсон М

Пример: простое последовательное копирование файла В следующих разделах приведены примеры коротких программ, реализующих простое последовательное копирование содержимого файла тремя различными способами:1. С использованием библиотеки С.2. С использованием Windows.3. С


Глава 11 Простое управление файлами

Из книги Искусство программирования на языке сценариев командной оболочки автора Купер Мендель

Глава 11 Простое управление файлами Файлы — это наиболее распространенная абстракция ресурсов, используемая в мире Unix. Такие ресурсы, как память, дисковое пространство, устройства и каналы межпроцессного взаимодействия (IPC), могут быть представлены в виде файлов.


11.3.3. Простое определение прав доступа

Из книги Linux программирование в примерах автора Роббинс Арнольд

11.3.3. Простое определение прав доступа Хотя режим файла представляет всю информацию, которая может понадобиться программе, для определения того, имеет ли она доступ к файлу, тестирование набора прав — дело хитрое и чреватое ошибкам. Поскольку ядро ухе включает в себя код


Простое присваивание

Из книги Все секреты Minecraft автора Миллер Меган

Простое присваивание Операция простого присваивания обозначается знаком =. Значение правого операнда присваивается левому операнду. Левый операнд должен быть модифицируемым L-выражением. При присваивании выполняются правила преобразования типов, описанные в разделе


Простое использование Lock Print

Из книги автора

Простое использование Lock Print Мы посмотрим на пример очень простой статистики, полученной от Lock Print без переключателей.* Заголовок блока всегда будет первым.* Далее идут группы владельцев - за группой владельца следуют все запросы этого владельца. Каждый владелец цепочки


Пример 10-22. Передача управление в начало внешнего цикла

Из книги автора

Пример 10-22. Передача управление в начало внешнего цикла #!/bin/bash# Команда "continue N" передает управление в начало внешнего цикла, отстоящего от текущего на N уровней.for outer in I II III IV V # внешний циклdo echo; echo -n "Группа $outer: " for inner in 1 2 3 4 5 6 7 8 9 10 # вложенный цикл do if [ "$inner" -eq 7 ] then


Простое приспособление: железная дверь

Из книги автора

Простое приспособление: железная дверь Функционирующая железная дверь – это одно из простейших устройств из красного камня. Железные двери открываются только с помощью сигнала. Установите железную дверь в стене своего дома. Поместите нажимную плиту прямо перед ней.