Linux: Управление процессами в командной строке

В этом посте будет немного рассказано о «магии» командной строки linux. А именно, о работе с процессами: перевод выполнения из background’a (фоновый режим) в foreground (передний план) и наоборот.

Приступим сразу к делу. Работу консольного приложения можно приостановить комбинацией клавиш «ctrl+z». После этого приложение «уснёт» и а консоль будет передана под наше управление. В действительности, будет послан системный сигнал STOP, после чего оно перейдёт в состояние «suspend» («подвешенное» состояние). Этот сигнал (19) и сигнал 9 («kill -9» — неотлавливаемый сигнал убить процесс системой) обрабатываются самой системой, а не приложением.

Перевести в suspend можно несколько процессов одновременно. Ссылка на них доступна через имя «%<последовательный номер процесса в фоне или его имя>». Для «возвращения к жизни» последнего процесса набираем в консоли fg. Для возвращения других набираем «fg %<последовательный номер процесса в фоне или его имя>», тут отлично работает автодополнение, если оно у вас настроено.

Процессы в статусе suspend не продолжают свою работу, для её продолжения должен быть посла сигнал CONTINUE. Это можно сделать не переходя в foreground («передний план») с помощью команды «bg %<номер процесса в фоне или его имя>».

Как бонус, можно убивать процессы через «kill %<номер процесса в фоне или его имя>».

Список всех заданий в фоне можно посмотреть с помощью команды jobs.

Кстати, всё вышеописанное также работает и для запущенных сразу в фоне команд с помощью амперсанда (&).

Вот иллюстрация работы:
$ jobs
$ yes > /dev/null
^Z
zsh: suspended yes > /dev/null
$ yes > /dev/null
^Z
zsh: suspended yes > /dev/null
$ yes > /dev/null &
[3] 21627
$ jobs
[1] - suspended yes > /dev/null
[2] + suspended yes > /dev/null
[3] running yes > /dev/null
$ fg
[2] continued yes > /dev/null
^Z
zsh: suspended yes > /dev/null
$ fg %3
[3] running yes > /dev/null
^Z
zsh: suspended yes > /dev/null
$ jobs
[1] suspended yes > /dev/null
[2] - suspended yes > /dev/null
[3] + suspended yes > /dev/null
$ fg %1
[1] continued yes > /dev/null
^Z
zsh: suspended yes > /dev/null
$ jobs
[1] + suspended yes > /dev/null
[2] suspended yes > /dev/null
[3] - suspended yes > /dev/null

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: