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

У меня есть запущенная программа на оболочке 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 следует перенести на второй терминал, включая новый управляющий терминал.

  • Как я могу открыть новый терминал в том же каталоге последнего использованного из оконного менеджера клавиш?
  • Предоставление пользователю SFTP доступа только с доступом к подкаталогу вне дома?
  • Как видеть пароль при вводе текста
  • UNIX be-spoke Shell-Script / Команды
  • Терминатор не работает!
  • Терминал: используйте другую команду в предыдущем файле
  • Где текущие обои хранятся в Kali Linux?
  • Как получить более длинный заголовок xterm в zsh
  • Перезагрузка zsh при изменении размера окна терминатора
  • Получение привилегий IO в Linux
  • Git Server Bash и SSH
  • Interesting Posts

    Получить итоговое количество всех исправлений, применяемых к серверу?

    Разрешить пользователю NonRoot монтировать определенный внешний жесткий диск NTFS

    Разрешения Ubuntu и веб-сервера

    Как я могу легко определить, какое псевдотерминальное устройство назначено терминальному эмулятору?

    Привести Debian к второй позиции в меню GRUB при запуске

    Как заставить поиски google / youtube использовать bash?

    неудача перенаправления для программы CGI

    Как я могу напечатать условный заголовок до начала stdout, если есть какой-либо вывод на stdout

    синхронизировать файлы рекурсивно между двумя папками, где файлы меньше 24 часов

    Как смонтировать раздел XFS через / etc / fstab, а пользователи без полномочий root могут использовать r / w?

    Содержит ли мягкая привязка к каталогу жесткие ссылки на его подфайлы?

    debconf не работает, больше ничего не может установить

    Программное обеспечение (SciTe) работает по-разному при открытии с терминала Vs GUI

    Безопасна ли блокировка экрана?

    Как копировать DVD в формат, например ogm / mkv

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