Intereting Posts
Linux GUI для отслеживания соединений, сделанных с / на этом компьютере Невозможно переадресовать пакет в pf при настройке прозрачного кальмара 3.4.13 на OpenBSD 5.7 Отображать строки между текстом с помощью grep Как настроить grub (или другой загрузчик) для использования ключей-модификаторов? 32 или 64-битный файл класса Резервное копирование по неправильному жесткому диску Использование Grep -o или Sed / Awk для захвата фрагмента из середины строки Как я могу получить новую версию Fedora 19 для загрузки на Intel NUC Создает ли разреженное изображение с помощью dd, подходящего для резервного копирования / восстановления из RAID? Gparted ошибка? Окно закрывается, но оно не выходит Шифрованная файловая система в VirtualBox Как восстановить поврежденный файл tar.gz Не удалось войти в систему из-за неправильного разрешения экрана Блокировка экрана LightDM в awesome-wm разблокируется сама по себе группы колес и разрешения

Нужно ли отключать процесс для продолжения работы после отключения?

Кто-нибудь будет достаточно любезен, чтобы объяснить, если и почему отключение необходимо, если вы хотите сохранить работу даже после того, как вы отключитесь.

Я спрашиваю, потому что каждый сайт, который я посетил, говорит об использовании disown и bg но bg сам работает для меня, и я не уверен, почему.

Это потому, что я не совсем понял, что такое disown или есть какие-то настройки где-то, влияющие на поведение команды bg по умолчанию?

Вот что я сделал:

  • Подключен к моей коробке CentOS 6 через SSH
  • Создал простой процесс:

     tar zcvf example.tar.gz ./examplepath > /dev/null 2>&1 
  • Приостановил работу

  • Возобновил его в фоновом режиме через bg 1
  • Отключен от SSH-сервера

Затем я проверил по FTP, чтобы узнать, все еще растет размер файла .tar.gz .

Процессы, создаваемые с помощью bg или & , обычно умирают в двух сценариях:

  1. Оболочка получает SIGHUP
  2. Они пытаются писать на терминал, который больше не существует.

Пункт №1 является основным виновником закрытия терминала. Однако независимо от того, произойдет это или нет, зависит от того, как вы закрываете терминал. Вы можете закрыть его:

  1. Что-то вроде нажатия «X» в вашем оконном менеджере
  2. Вы можете ввести exit , logout или CTRL + D.

Пункт №1 – это тот, который приведет к отправке SIGHUP. # 2 нет.

Короче говоря, если вы выполняете процесс с помощью bg , а затем выходите с exit , exit logout или CTRL + D , процесс не будет убит.

Когда вы закрываете терминал, все процессы, которые используют этот терминал (см. Столбец TTY в ps -elf ), получают SIGHUP . Он должен обработать, что делать в SIGHUP . В классических unixes (AIX, Solaris) процесс закрывается по этому сигналу. Вот почему вам нужно использовать disown . От man bash :

Оболочка выходит по умолчанию при получении SIGHUP. Перед выходом из него интерактивная оболочка передает SIGHUP во все задания, запускается или останавливается. Остановленные задания отправляются SIGCONT для обеспечения получения SIGHUP. Чтобы оболочка не отправляла сигнал на конкретное задание, его следует удалить из таблицы заданий с отключенным встроенным устройством (см. Ниже инструкции SHELL BUILTIN COMMANDS) или пометить, чтобы не получать SIGHUP с помощью disown -h.