Как я могу отменить запущенный процесс и связать его с новой оболочкой экрана?

У меня есть запущенная программа на оболочке SSH. Я хочу приостановить его и уметь отключить его выполнение, когда вернусь.

Один из способов, которым я думал, – это передать свою собственность оболочке экрана, тем самым поддерживая ее там.

Есть ли другой способ?

8 Solutions collect form web for “Как я могу отменить запущенный процесс и связать его с новой оболочкой экрана?”

Использование screen GNU – лучший выбор.

Начальный экран запускается при первом входе в систему – я запускаю screen -D -R , запускаю вашу команду и либо отключаю, либо приостанавливаю его с помощью CTRL-Z а затем отключается от экрана, нажимая CTRL-A затем D

При повторном входе в систему снова подключитесь, запустив screen -D -R . Вы будете в той же оболочке, что и раньше. Вы можете запускать jobs чтобы просмотреть приостановленный процесс, если вы это сделали, и запустите %1 (или соответствующее задание #) для повторного запуска.

Вы можете отменить «собственность» программы из оболочки с disown встроенным:

 # press Ctrl+Z to suspend the program bg disown 

Однако это только говорит оболочке не отправлять сигнал SIGHUP программе, когда оболочка завершается. Программа сохранит любое соединение с терминалом, как правило, в качестве стандартного ввода, вывода и потоков ошибок. Невозможно повторно подключить их к другому терминалу. ( Экран работает путем эмуляции терминала для каждого окна, поэтому программы привязаны к окну экрана.)


Можно привязать filedescriptors к другому файлу, добавив программу в отладчик (т. ptrace Используя ptrace ) и заставив его вызвать open , dup и close . Есть несколько инструментов, которые делают это; это сложный процесс, и иногда они разрушают процесс. Возможности включают (ссылки, собранные в ответах на « Как я могу отредактировать запущенный процесс и связать его с новой оболочкой экрана» и может ли я nohup / screen уже запустить процесс? ):

  • захватить (и более амбициозную криопиду )
  • neercs
  • reredirect
  • reptyr
  • retty

Чтобы переместить процесс между терминалами или повторно подключить отключенное , вы можете использовать, например, reptyr .

Мое любимое решение – использование tmux , вы можете отсоединить сеанс и снова подключить его к другому терминалу.

Когда вы отсоединились от предыдущей сессии, вы можете безопасно закрыть терминал; позже используйте tmux attach чтобы вернуться к сеансу, даже если вы вышли из системы.

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

Я не использую его регулярно, но neercs утверждает, что поддерживает это. Это screen программа с различными причудливыми функциями, такими как лучшее управление панелью, но главное, что она предлагает, это возможность импортировать процесс в панель

Если вы просто хотите приостановить его и перезапустить после этого, вы можете использовать kill с сигналом STOP или CONT .

Сначала выясните процессы PID с

 $ ps aux 

Затем отправьте сигналы на этот PID, указанный в процессе

 $ kill -STOP <PID> $ kill -CONT <PID> 

«injcode» от ThomasHabets, похоже, именно то, что мне нужно:

https://github.com/ThomasHabets/injcode

Программа encccode позволяет произвольно вводить произвольный код в запущенный процесс, независимо от того, знали ли вы заранее и выполняли ли экран или tmux

Из README:

Пример 1: переместить irssi с одного терминала на другой

Возможно, переместите его на экран.

Сначала запустите irssi в одном терминале.

Запустить код в другом терминале: $ injcode -m retty

Теперь Irssi следует перенести на второй терминал, включая новый управляющий терминал.

  • Вход фида в / dev / tty для продолжения ssh
  • Как я могу открыть новый терминал в том же каталоге последнего использованного из оконного менеджера клавиш?
  • Автоматическое завершение терминала OSX bash - нечетное поведение на двойной вкладке
  • Символы, отличные от ASCII, обрабатываются неправильно в командной строке
  • Солнечная система цветов в fbterm?
  • Терминал изменяет размеры
  • terminfo отключить XON / XOFF
  • Контрольный + L не очищающий экран
  • Загрузите мой .profile для bash в буфер обмена Emacs? (многорежимный режим)
  • Автозаполнение и раскраска не работают, при использовании ssh в оболочке emacs
  • Отключить поведение копирования и вставки по умолчанию в Bash
  • Interesting Posts

    bluez: наушники bluetooth не могут повторно подключаться после отключения

    ufw разрешает ssh – а затем соединение теряется

    Как мне перебирать список из dconf в bash?

    Используя sed (?), Чтобы извлечь один экземпляр строки, которая повторяется в исходной строке

    Запуск нескольких экземпляров XServer на одном компьютере на разных процессорных ядрах

    Добавление латентности при доступе к определенным веб-сайтам под Linux

    OpenVPN с использованием IPv6 на VPS

    Служит ли прослушивание команды для Unix Datagram Sockets?

    Инструмент для автоматического применения конфигурации RandR при подключении внешнего дисплея

    Отправка вложений с помощью mailx и uuencode

    Работа в Cron только за 7 дней, за которой не следует несколько недель

    Возьмите информацию из CSV-файла и добавьте его после определенного шаблона

    Клавиатура не распознается даже с помощью клавиши showkey

    Как создать псевдоним для открытия каталога на Mac

    Драйвер Debian Realtek RTL7832BS

    Linux и Unix - лучшая ОС в мире.