Мы как то писали, как запускать одновременно несколько команд в Linux здесь, теперь мы узнаем как одновременно их выполнять. Допустим, вы редактируете файл конфигурации в редакторе Linux «vi», и вдруг вам нужно найти некоторые данные в другом файле? В обычной системе GUI это не проблема. Вы просто открываете второй файл, проверяете, когда вам нужно, а затем переключитесь на первую программу. В командной строке это не так просто. Выполнение процесса через CLI блокирует дальнейший ввод любой другой программы. Возьмите к примеру команду sleep:
Пока она работает 30 минут, мы ничего не можем сделать. Однако мы все же можем вручную управлять процессами и запускать команду одновременно в Linux с помощью команд «bg» и «fg». Вот как это работает.
Ctrl + c и Ctrl + z
Мы все знаем, что если процесс неправильный, ctrl + c просто отключает его. Либо если программа работает слишком долго, либо выходит из огромного вывода, который прокручивается быстрее, чем вы можете это увидеть! Нажатие Ctrl + C прерывает немедленно процесс с помощью сигнала SIGINT. Это говорит о том, что процесс завершает то, что он делает, и немедленно прерывается.
В большинстве случаев это работает, но имейте в виду, что каждый процесс должен решить, как его обрабатывать. Некоторые процессы, такие как vi, требуют подтверждения перед выходом – как правило, без уважительной причины, так как прерывание без предупреждения может привести к потере или повреждению данных.
Однако вместо того, чтобы убить процесс с помощью Ctrl + c, вы можете приостановить его. И здесь полезно использовать Ctrl + z. Нажатие Ctrl + z временно приостанавливает программу и отправить ее на задний план. Например:
На изображении выше мы начали редактировать файл «test» с текстовым редактором vi. Затем мы нажали Ctrl + z. Эта команда «останавливает» процесс или приостанавливает его. Они называются «заданиями», и каждое задание имеет номер. Это число отображается всякий раз, когда мы приостанавливаем процесс в квадратных скобках. Например, номер задания приостановленного vi-приложения – 1.
Теперь, когда процесс приостановлен, мы вернемся к командной строке, где мы можем выполнять другие команды!
Возобновление приостановленной работы
Имейте в виду, что приостановленная работа, такая как редактор vi выше, больше не работает. Она находится во временном замороженном состоянии, ожидающем оживления. Мы можем возродить ее двумя способами:
- Восстановите работу и выведите ее на передний план (и запустите командную строку)
- Восстановите работу и отправьте ее на задний план (и мы можем продолжать делать другие вещи)
Чтобы повторно активировать приостановленное задание и перенести ее на передний план, мы используем команду:
fg% n
Где «n» обозначает номер задания. Поэтому, если вы закончили поиск своих данных и хотите вернуться к редактированию файла в vi, мы вводим:
fg% 1
Если мы хотим, чтобы процесс возобновил операции и остался в нем, мы вводим:
bg% n
Где «n» – снова номер задания. Поэтому, если у вас есть процесс, который должен работать непрерывно (например, установить Apache), но все же нужно делать другую работу в командной строке, вы можете возобновить его работу с помощью команды «bg».
Если вы забыли номер задания для своих процессов, не волнуйтесь. Просто используйте эту команду:
jobs -l
Она покажет список существующих заданий с их статусом и номером задания следующим образом:
Поэтому никогда не бывает никакой опасности потерять слишком много рабочих мест.
Запуск команд сразу же в фоновом режиме
В приведенном выше сценарии показано, как приостановить процесс с помощью Ctrl + z, а затем возобновить его операции в фоновом режиме с помощью «bg% n». Однако мы можем объединить эти две команды, просто набрав символ амперсанда (&) после команды. Примеры команд с амперсандом можно посмотреть здесь. Это немедленно отправит его на задний план. Например:
sleep 30m &
Выполняет команду sleep в течение 30 минут, и процесс будет продолжать работать в течение 30 минут в фоновом режиме следующим образом:
Очень удобно! Как и раньше, вы можете использовать команду «fg», чтобы снова вывести процесс на передний план, а затем убить или приостановить его, как вы пожелаете.
Таким образом, с этим предупреждением вы теперь знаете, как одновременно запускать команды в Linux и можете многозадачно использовать ваше содержание.