nextuppreviouscontents
Next:Приостановка и продолжение работы Up:Управление заданиямиPrevious:Передний план и фоновый

Перевод заданий в фоновый режим и уничтожение заданий

Начнем с простого примера. Рассмотрим команду yes, которая на первый взгляд покажется бесполезной. Эта команда посылает бесконечный поток строк, состоящих из символа "y" в стандартный вывод.gif Попробуем, как работает эта команда:
/home/larry# yes
y 
y 
y 
y 
y
  Последовательность таких строк будет бесконечно продолжаться. Уничтожить этот процесс можно нажатием клавиши прерывания, которая обычно является комбинацией Ctrl-C. Поступим теперь иначе. Чтобы на экран не выводилась эта бесконечная последовательность перенаправим стандартный вывод команды yes на /dev/null. Как вы, возможно, помните, устройство /dev/null действует как "черная дыра": все данные, посланные в это устройство, пропадают. С помощью этого устройства очень удобно избавляться от слишком обильного вывода некоторых программ.
/home/larry# yes > /dev/null
Теперь на экран ничего не выводится. Однако и приглашение командной оболочки также не возвращается. Это происходит потому, что команда yes все еще работает и посылает свои сообщения, состоящие из букв y на /dev/null. Уничтожить это задание также можно нажатием клавиш прерывания.

Допустим теперь, что вы хотите, чтобы команда yes продолжала работать, но при этом и приглашение командной оболочки должно вернуться на экран, так чтобы вы могли работать с другими программами. Для этого можно команду yes перевести в фоновый режим, и она будет там работать, не общаясь с вами.

  Один способ перевести процесс в фоновый режим -- приписать символ "&" к концу команды. Пример:

/home/larry# yes > /dev/null &
\verb+[1] 164+ 
/home/larry#
Как видно, приглашение командной оболочки опять появилось. Однако, что означает "[1] 164"? И действительно ли команда yes продолжает работать?

Сообщение "[1]" представляет собой номер задания (job number) для процесса yes. Командная оболочка присваивает номер задания каждому исполняемому заданию. Поскольку yes является единственным исполняемым заданием, ему присваивается номер 1. Число "164" является идентификационным номером, соответствующим данному процессу (PID), и этот номер также дан процессу системой. Как мы увидим дальше, к процессу можно обращаться, указывая оба этих номера.

  Итак, теперь у нас есть процесс команды yes, работающий в фоне, и непрерывно посылающий поток из букв y на устройство /dev/null. Для того, чтобы узнать статус этого процесса, нужно исполнить команду jobs, которая является внутренней командой оболочки.

/home/larry# jobs
[1]+  Running                 yes >/dev/null  &- 
/home/larry#
Мы видим, что эта программа действительно работает. Для того, чтобы узнать статус задания, можно также воспользоваться командой ps, как это было показано выше.

  Для того, чтобы прервать работу задания, используется команда kill. В качестве аргумента этой команде дается либо номер задания, либо PID. В рассмотренном выше случае номер задания был 1, так что команда

/home/larry# kill %1
прервет работу задания. Когда к заданию обращаются по его номеру (а не PID), тогда перед этим номером в командной строке нужно поставить символ процента ("%").

Теперь введем команду jobs снова, чтобы проверить результат предыдущего действия:

/home/larry# jobs
[1]+  Terminated              yes >/dev/null
/home/larry#

Фактически задание уничтожено, и при вводе команды jobs следующий раз на экране о нем не будет никакой информации.

Уничтожить задание можно также, используя идентификационный номер процесса (PID). Этот номер, наряду с идентификационным номером задания, указывается во время старта задания. В нашем примере значение PID было 164, так что команда

/home/larry# kill 164
была бы эквивалентна команде
/home/larry# kill %1
При использовании PID в качестве аргумента команды kill вводить символ "%" не требуется.


nextuppreviouscontents
Next:Приостановка и продолжение работы Up:Управление заданиямиPrevious:Передний план и фоновый
root

Sun Aug 29 12:01:30 MSD 1999