Приоритетный и фоновый режимы

Программу можно запустить как фоновый процесс (указать в строке после запускаемой команды символ &) или перевести задачу переднего плана (foreground) в фоновый режим (с помощью команды bg). При работе программы в качестве фонового процесса вы можете продолжать вводить команды и работать с другими процессами.

Для примера рассмотрим команду yes:

# yes

(команда запушена в «приоритетном режиме»)

Результатом работы этой команды будет длинный столбец символов y в левом краю экрана, бегущий быстрее, чем вы можете следить за этим.

Можно приостановить выполнение команды комбинацией клавиш Ctrl+Z. Процесс приостановил свое выполнение, но не прекратился. При этом на экране появится сообщение:

[1]+ Stopped yes

Давайте разберем его по частям:

[1]- это номер задачи, он используется когда нам надо сослаться конкретно на эту задачу. Если вы запускаете некоторый процесс в фоновом режиме, то shell выводит PID запущенного процесса и номер задачи (при выполнении л/р их желательно запоминать).

«+» - говорит о том, что этот процесс является текущим процессом или процессом по умолчанию. Если запущено несколько процессов, то кроме того, у одного из них будет стоять знак «-». Он обозначает предыдущуюзадачу которая может стать текущей после завершения нынешней текущей.

Stopped - означает, что процесс приостановлен. Процесс не «умер», но сейчас он не выполняется. Linux хранит его в особом приостановленном состоянии, готовым продолжить работу, если будет дана соответствующая команда.

yes - имя команды, которое было введено в командной строке при запуске программы.

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

· bg[%номер задачи]–чтобы перевести процесс в фоновый режим;

· fg[%номер задачи]– чтобы перевести процесс в приоритетный режим;

· kill[%номер задачи]– чтобы убить процесс.

Во всех рассмотренных командах [%номер задачи] – необязательный параметр, и он необходим, когда вы работаете с не текущим процессом. Кроме того, уничтожить процесс можно также, если запустить этот процесс в приоритетном режиме (с помощью команды fg), а затем – нажатием комбинации клавиш Ctrl+C – уничтожить его.

Пример 1

Запустим команду yes:

#yes

Приостановим её выполнение:

Ctrl+Z

На экране появится сообщение:

[1]+ Stopped yes

Это означает, что данный приостановленный процесс является текущим с номером 1.

Продолжим выполнение этого процесса в фоновом режиме:

#bg %1

или, в данном случае:

#bg(так как процесс текущий)

Убедимся в выполнении этого процесса с помощью команды jobs:

[1]+ Running yes

Пример 2

Уничтожим процесс с номером 3:

#kill %3

Возможно, на экране появится сообщение вида:

[3]+ Stopped<название команды>

Это сообщение о том что, опять таки, процесс был приостановлен, может ввести в заблуждение. Чтобы выяснить, «жив» ли еще процесс (т.е. исполняется или находится в приостановленном состоянии), напишите в командной строке:

#jobs

[3]+ Terminated yes

Это означает, что процесс был завершен. В случае повторного ввода командыjobs – процесс с номером 3 больше упоминаться не будет. Возможно, что команда jobs не выдаст никакого сообщения. Это означает, что ни один из процессов не запущен в фоновом режиме.

 

Обобщим то, что вы должны были узнать в этом разделе:

[ctrl-z] – Такая комбинация клавиш вызывает приостановку задачи работающей в приоритетном режиме, хотя некоторые программы могут игнорировать её. После того, как задача приостановлена, она может исполняться в фоновом режиме.

[fg] [%номер задачи] – Эта встроенная команда shell'а устанавливает задачу в приоритетный режим. Чтобы понять, какая задача будет установлена в приоритетный режим по умолчанию, напишите jobs, и найдите задачу с «+».

[&] – Когда & добавляется в конец командной строки, это заставляет команду исполняться в фоновом режиме.

[bg] [%номер задачи] – Это встроенная команда shell'а, которая устанавливает задачу в фоновый режим. Чтобы понять, какая задача будет установлена по умолчанию, наберите jobs, и найдите задачу с «+».

[kill] [%номер задачи] – Эта команда завершает задачу работающую в фоновом режиме или приостановленную. Вместо параметра [%номер задачи]можно использовать PID процесса (его можно увидеть, например, при запуске процесса в фоновый режим)

[jobs] – Эта команда shell'а просто перечисляет информацию о задачах, которые исполняются или приостановлены. Иногда, она также сообщают о процессах, которые благополучно завершились или были завершены.

[ctrl-c] – Это общий символ прерывания. Обычно, если вы нажимаете эту комбинацию клавиш, когда программа исполняется в приоритетном режиме, то уничтожаете программу (иногда для этого надо несколько попыток). Однако не все программы будут реагировать на этот способ прерывания.