Что такое disown?
Оболочки, такие как Bash, при закрытии терминала отправляют сигнал 'завершиться!' (SIGHUP) всем заданиям, которыми они управляют. `disown` удаляет определенное задание из списка управляемых оболочкой, предотвращая его завершение при закрытии оболочки.
Когда использовать?
- Когда забыли nohup: Используется, когда запустили долгую задачу без `nohup`, нужно уходить, но задачу нельзя прерывать.
- Порядок действий: Используется в последовательности: приостановка выполнения (Ctrl+z) -> перевод в фоновый режим (bg) -> отказ от владения (disown).
- Встроенная команда оболочки: Это не отдельная программа, а встроенная функция оболочки (Bash, Zsh и т.д.).
Основные опции (Оболочка)
При использовании без опций применяется к последнему заданию. Для указания конкретного задания используйте 'номер задания (Job ID)'.
1. Базовое использование и указание цели
2. Сохранение состояния
3. Справка
Сгенерированная команда:
Комбинируйте команды.
Описание:
`disown` Запускает команду.
Комбинируйте эти опции, чтобы виртуально выполнять команды с помощью ИИ.
Примеры сценариев использования (обязательные шаблоны)
`disown` используется не отдельно, а в связке с `Ctrl+z` и `bg`.
Предположим ситуацию: запущен бэкап без nohup!
Вы запустили `backup.sh`, и он займет 1 час. Если закрыть терминал, бэкап остановится. Вот как это исправить.
3 шага для спасения (Пошагово)
Введите команды в следующем порядке:
- 1. Нажмите `Ctrl + z` в запущенном терминале, чтобы временно остановить задание.
- 2. Введите команду `bg`, чтобы снова запустить остановленное задание в фоновом режиме.
- 3. Введите команду `disown`, чтобы разорвать связь с оболочкой.
Отделить только определенное задание
disown %2
Отделяет только задание номер 2, проверенное с помощью `jobs`.
Оставить в списке (-h)
disown -h %1
Будет видно при вводе команды `jobs`, но не завершится при закрытии терминала.
Установка
`disown` — это встроенная команда (Built-in) таких оболочек, как Bash и Zsh, поэтому отдельная установка не требуется.
Установка не требуется
Если вы используете терминал Linux, он уже установлен.
Советы и примечания
Полезные советы
- Job ID против PID: `disown` использует не ID процесса (PID, например: 1234), а номер задания оболочки (Job ID, например: %1). Не забывайте добавлять `%`.
- Невозможно проверить вывод: `nohup` создает файл `nohup.out`, но `disown` отсоединяет уже запущенное задание, поэтому вывод может быть потерян. Для сохранения вывода потребуется использовать `gdb` или аналогичные инструменты, что усложняет процесс.
- Как проверить: После `disown` задание исчезает из списка `jobs` (если не использовались опции). Чтобы проверить, жив ли процесс, нужно использовать `ps -ef | grep команда`.