ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП |
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы. |
2.11.3 Работа в фоне и ликвидация работДавайте начнем с простого примера. Команда yes - вроде бы бесполезная команда, посылающая бесконечный поток "y" на стандартный выход. (Но это очень полезно. Если вы направите через конвейер эти "y" на вход другой команды, которая требует ответов yes и "no" на вопросы, поток "y" даст подтверждение на все вопросы). Попробуйте.Это закончится в бесконечности. Вы можете убить процесс, нажав клавиши прерывания; обычно это/home/larry# yes y y y y y Ох, теперь намного лучше. Ничего не печатается, но и подсказка shell не появляется. Это потому, что программа продолжает работать, посылать "y" в /dev/null. Снова нажмите клавиши прерывания, чтобы прекратить это./home/larry# yes > /dev/null Давайте предположим, что мы хотим, чтобы команда yes продолжала работать, но также хотим получить обратно подсказку shell, чтобы выполнять другие работы. Мы можем перевести команду yes в фоновый режим, что позволит ей выполняться, но без выхода на взаимодействие с пользователем. Чтобы переместить процесс в фоновый режим, необходимо после команды символ ``&''. Вы видите, что мы вновь получили подсказку. Но что значит ``/home/larry# yes > /dev/null &; [1] 164 /home/larry# `` Теперь мы имеем выполняемый процесс yes в фоновом режиме, непрерывно посылающий поток "y"-ков в /dev/null. Чтобы проверить состояние этого процесса, используйте внутреннюю команду shell - jobs. Ясно, что она выполняется. Вы можете также воспользоваться командой ps, показанной ранее, для проверки статуса работ./home/larry# jobs [1]+ Running yes >/dev/null & /home/larry# Для завершения работы используйте команду kill. Эта команда может брать в качестве аргумента как номер работы, так и идентификатор процесса. Это была работа номер 1, так что используя команду мы ликвидируем работу. При идентификации работы по номеру необходимо впереди ставить символ процента (``%'')./home/larry# kill %1 Теперь, после ликвидации, мы можем снова использовать jobs для проверки: Работа действительно мертва, и если мы снова воспользуемся командой jobs, ничего не будет выведено на экран./home/larry# jobs [1]+ Terminated yes >/dev/null /home/larry# Вы можете также убить работу, используя номер идентификатора процесса (PID), который выводится наряду с работой, когда вы начинаете работу (в фоновом режиме). В нашем пример PID равен 164, так что команда Вам не надо использовать ``%'', когда вы обращаетесь к работе по номеру идентификатора процесса./home/larry# kill 164 эквивалентна /home/larry# kill %1 |