Программы
Как запустить программу в терминале в фоне, без вывода какого либо текста

Как запустить программу в терминале в фоне, без вывода какого либо текста

Запускаем программу в терминале в фоновом режиме и разбираемся, как и почему это работает в Linux / Unix терминале.

Для начала оговорюсь, что "отключать" вывод программы может быть вредно. Так например, если программа внезапно завершилась, её "предсмертные" слова могут помочь нам понять причину завершения.

Но хотим – значит делаем! Для начала разберёмся, как же программа выводит текст в консоль.

Файловые дескрипторы процессов в Unix-подобных системах

Каждая программа, которая запускается на Unix-подобной операционной системе имеет набор файловых дескрипторов (описателей). Дескрипторы используются для взаимодействия с потоками ввода / вывода, файлами, сокетами сети. В процессе жизнедеятельности программа может открывать новые дескрипторы и закрывать / освобождать старые.

Обычно при старте операционной системой выделяется 3 дескриптора:

  1. для стандартного ввода (stdin) – используется для получения информации от пользователя в терминале / программ, и которых пайпом перенаправили вывод;
  2. для стандартного потока вывода (stdout) – печать на терминал,
  3. для потока вывода ошибок (stderr) – печать ошибок и предупреждений (также по умолчанию на терминал)

– имеющие номера 0, 1 и 2 – соответственно.

Перенаправление потоков ввода / вывода

Стандартный поток вывода отнюдь не обязан выводить результат в терминал. К примеру, мы можем его перенаправить в файл, например:

some_program > ./file.txt

Однако, под каждую программу создавать файл, который к тому же будет занимать какое ни какое дисковое пространство – расточительно. Для этой задачи вполне сойдёт стандартный для Unix-like систем псевдо-файл /dev/null. В него можно записать всё что угодно, но нельзя ничего прочитать – этакая персональная чёрная дыра.

some_program 1> /dev/null

Можно увидеть, что появилась "1" перед символом перенаправления. Таким образом можно указать, какой по номеру поток мы перенаправляем. По умолчанию используется 1-ый – стандартный поток вывода.

Теперь нам нужно перенаправить стандартный поток ошибок. Сделаем мы это через перенаправление его в 1-ый (stdout), который уже перенаправлен в /dev/null:

some_program 2>&1 1> /dev/null

Если мы хотим перенаправить вывод из одного дескриптора в другой – перед номером принимающего дескриптора необходимо поставить &. Иначе – запишем в файл "1".

Запуск программы в терминале в фоне

Также символ & нам понадобится для запуска программы в фоне. Например, давайте запустим простую, но долгую программу в фоне, выполним другую программу, а потом вернём из фона первую программу.

$ sleep 100 &
[1] 4925
$ echo "Hello"
Hello
$ jobs
[1]+  Running                 sleep 100 &
$ fg 1
sleep 100
^C

С помощью команды jobs можно получить список запущенных в сессии терминала задач. Задачи пронумерованы – по этим номерам можно поднимать задачи из фонового режима командой fg.

Таким образом, нашу программу мы можем "запустить в терминале в фоне, без вывода какого либо текста" следующим способом:

some_program 2>&1 > /dev/null &
Также может быть вам интересно:

Малоизвестные, но полезные возможности утилиты less

Команда less является одной из самых известных на ряду с cd, cp, mv и т.д. Но используется less зачастую далеко не на всю мощь.

Читать »

Моржовый оператор в Python3.8

Вышла первая альфа версия Python 3.8 – самое время поглядеть, что нового добавили в язык!

Читать »
Фото Пример своей консольной команды в Django проекте

Пример своей консольной команды в Django проекте

Если вы работали с Django проектом, то, скорее всего, запускали команды из консоли (manage.py). В Django есть простой способ писать свои команды для управления проектом.

Фото Как на Bash посчитать число строк в проекте (директории)

Как на Bash посчитать число строк в проекте (директории)

Ниже будет представлен однострочник, решающий данную задачу на Bash + пошаговое описание его работы.

Фото И снова sudo, и снова "решето"

И снова sudo, и снова "решето"

В утилите sudo была исправлена очередная уязвимость.

Фото О многозадачности и планировщике задач (шедулер)

О многозадачности и планировщике задач (шедулер)

Небольшой экскурс в проблемы многозадачности и реализации планировщиков.

Фото Как найти самые большие папки и файлы в Linux

Как найти самые большие папки и файлы в Linux

Когда кончается место на жестком диске, возникает закономерный вопрос: на что же оно было потрачено, какие файлы разрослись больше положенного?

Фото Команда grep – полезные ключи и примеры использования

Команда grep – полезные ключи и примеры использования

У команды "grep" довольно много различных особенностей. особенно, если учесть, что с английского это "решето" – а что может войти в решето , не факт что выйдет!

Фото Как создать неизменяемый файл в Linux / MacOS / FreeBSD

Как создать неизменяемый файл в Linux / MacOS / FreeBSD

Само собой, root может всё (если введёт пару команд), однако, это вполне легальный способ запретить изменение файла.

Фото Как удалить все Docker образы и контейнеры

Как удалить все Docker образы и контейнеры

Не всегда нужно удалять всё, но объяснение данного "рецепта" объяснит как в целом удалять образы и контейнеры.