Если описать работу SSH (Secure Shell — безопасная оболочка) простыми словами, то её функция в том, что это простой способ подключиться к удалённому компьютеру от имени существующего на той системе пользователя с возможностью выполнять команды на ней. В первую очередь это относится к командам с интерфейсом командной строки, но также возможна передача и других видов трафика. В более технических терминах, когда мы подключаемся по ssh к другому пользователю на какой-либо системе и запускаем на той машине команды, то в действительности создаётся псевдо терминал и он подсоединяется к оболочке с входом (login shell) выполнившего вход пользователя.
Когда мы выходим (разлогиниваемся) из сессии, или сессия закрывается после таймаута из-за неактивности в течение определённого времени, то сигнал SIGHUP отправляется псевдо терминалу и все работы, которые были запущены в этом терминале, даже работы, которые имеют их родительские работы инициированные в псевдо терминале, также получают сигнал SIGHUP для принудительного закрытия.
Как Закрепить Приложение на Xiaomi
Только работы, которые были настроены для игнорирования этого сигнала, переживают терминацию сессии. На системах Linux есть много способов сделать эти работы запущенными на удалённом сервере или любой машине даже после выхода пользователя и терминации сессии.
Основы о процессах в Linux
Нормальные процессы
Нормальные процессы это те, у которых продолжительность жизни ограничивается сеансом. Они запускаются во время сессии как процессы переднего плана и завершаются через определённое время или когда сессия прекращается из-за выхода пользователя. Эти процессы имеют своего владельца, которым является любой валидный пользователь системы, включая root.
Осиротевшие процессы
Осиротевшие процессы это те, которые изначально имели родительский, создавший их процесс, но после некоторого времени родительский процесс непреднамеренно завершил работу или остановился из-за ошибки, что сделало init родителем данного процесса. Такие процессы имеют init в качестве их непосредственного родителя, который ожидает от этих процессов остановки или завершения их работы.
Процессы демонов
Это процессы, которые намеренно сделаны осиротевшими. Процессы, которые намеренно оставлены работающими в системе, называются демонами или намеренно осиротевшими процессами. Обычно это процессы с длительным выполнением, которые после инициации были отсоединены от контролирующего терминала чтобы они могли работать в фоне, пока они не завершать их задачи или пока в них не возникнет ошибка. Родители таких процессов намеренно завершают свою работу, делая так, что дочерний процесс выполняется в фоне.
Техники для сохранения запущенной SSH сессии после отключения
Могут быть различные способы оставить ssh сессию запущенной после отключения, они описаны далее:
1. Использование команды screen для сохранения запущенных сессий SSH
screen — это текстовый менеджер окон для Linux, который позволяет пользователям управлять несколькими сессиями терминала одновременно, переключаться между сессиями, вести журнал действий в сессии для запущенных в screen сессий и даже возобновлять сессии в любой время по нашему желанию не беспокоясь о том, что произойдёт выход из сессии или терминал будет закрыт.
Как сделать, чтобы окно черепашки turtle не закрывалось после выполнения программы
Сессии screen могут быть запущены и затем отсоединены от контролирующего терминала, что оставит их запущенными в фоне и затем их можно заново подсоединить в любое время и даже в любом месте (выполнив вход по SSH с другого компьютера). Всё что нужно, это запустить сессию в screen и когда вы хотите, отсоединить её от псевдо терминала (или контрольного терминала) и выйти из сессии. Когда нужно, вновь выполните вход по SSH и возобновите сессию.
После запуска команды screen, вы будете внутри новой сессии screen, в этой сессии вы можете создавать новые окна, перемещаться между окнами, блокировать окна и делать многое другое, что вы можете делать в обычном терминале:
screen
Теперь, когда сессия session запущена, можно запустить любую команду и сохранить сессию на случай отключения выполнив отсоединение сессии.
Отсоединение экрана screen
Когда вы хотите отключиться от удалённой сессии, но хотите созданную вами сессию сохранить живой, то вам просто нужно отсоединить screen от терминала, чтобы у него не осталось контролирующего терминала. После этого вы можете безопасно отключиться.
Для отсоединения screen от удалённого терминала просто нажмите Ctrl+a, а затем нажмите d и вы вернётесь в терминал, в котором увидите сообщение, что Screen отсоединён. Всё готово — можно выходить из сессии (например, отключиться от SSH), а запущенный в эту сессию процесс останется работать.
Возобновление отсоединённой сессии screen
Если вы хотите возобновить отсоединённую сессию screen, которую вы оставили перед тем как отключиться, просто снова повторно залогинтесь на удалённом терминале и наберите
screen -r
Предыдущая команда подходит если у вас только одна сессия screen.
Если открыто несколько сессий screen, то после опции -r нужно указать её индивидуальный идентификатор.
Следующая команда при нескольких запущенных сессиях выведет их список с идентификаторами:
screen -r
Для подключения к одной из них нужно ввести команду вида:
screen -r
2. Использование Tmux (мультиплексора терминалов) чтобы программа работала после отключения от SSH
Tmux — это ещё одна программ, которая создана на замену screen. В ней имеется большинство возможностей screen, а также несколько дополнительных функций, которые делают её более мощной чем screen.
Она позволяет, кроме всех других опций, которые предлагает screen, разделение экрана терминала по горизонтали и вертикали, чтобы иметь сразу несколько консолей, позволяет изменять размер этих панелей, имеется мониторинг активности сессий, поддержка скриптов используя режим командной строки и т. д. Благодаря этим функциям tmux, он имеется практически во всех дистрибутивах Unix и даже был включён в базовую систему OpenBSD.
Запуск сессии Tmux
После подключения к удалённому хосту по SSH, наберите в командной строке:
tmux
Вы откроете новую сессию с новым окном — здесь вы можете делать всё что угодно как в обычном терминале.
После выполнения ваших операций в терминале, вы можете отсоединить эту сессию от контрольного терминала, чтобы она перешла в фон, и вы смогли безопасно отключиться от SSH.
Отсоединение сессии Tmux от терминала
В запущенной сессии tmux вы можете набрать:
tmux detach
Либо вы можете использовать сочетание клавиш, нажмите Ctrl+b, а затем нажмите d. После этого ваша текущая сессия будет отсоединена и вы вернётесь в ваш терминал, который вы можете безопасно закрыть (отключиться от SSH).
Возобновление фоновой сессии Tmux
Чтобы повторно открыть сессию, которую вы отсоединили и вернуть всё в то состояние, в котором находился терминал до того, как вы отключились от системы, просто повторно залогинтесь на удалённую машину и наберите
tmux attach
чтобы подсоединить закрытую сессию. Она вернётся, и запущенная в ней программа будет работать как прежде.
Чтобы узнать больше о tmux, о его возможностях и других командах и комбинациях клавиш, смотрите статью «Как пользоваться tmux для создания нескольких терминалов внутри одной консоли».
3. Использование команды nohup чтобы программа не закрывалась после отключения от SSH
Если вы не особо знакомы со screen или tmux вы можете использовать nohup и отправить вашу долго выполняющуюся команду в фон, чтобы вы могли продолжать работать в терминале, пока команда будет выполняться в фоне. Также при переводе команды в фон вы можете отключиться от удалённой системы, не опасаясь, что запущенная программа будет остановлена.
С командой nohup мы говорим процессу игнорировать сигнал SIGHUP который отправляется сессией ssh при её завершении, это делает команду устойчивой даже после выхода из сессии. При отключении от сессии, команда отсоединяется от контролирующего терминала и продолжает работать в фоне как процесс демона.
Выполнение команды в фоне используя nohup
Это простой сценарий в котором во время сессии SSH мы запустили команду find для поиска файлов в фоне используя nohup. При отправке работы в фон в приглашение терминала возвращается JOBID и PID процесса.
nohup find / -type f $gt; files_in_system.out 2>1 pingout https://zalinux.ru/?p=3137″ target=»_blank»]zalinux.ru[/mask_link]
Как сделать чтобы программа не закрывалась
Все работает, но я хочу, чтобы окно программы не закрывалось после нажатия на Enter. Как это сделать?
Пользователь
Регистрация: 19.08.2009
Сообщений: 89
может ты имел ввиду не закрывалось пока ты не нажмешь ентер
system(«pause»);
Последний раз редактировалось Sazary; 18.09.2009 в 18:25 .
Форумчанин
Регистрация: 18.08.2009
Сообщений: 289
Также прочитал такие слова:
Если не считать программных решений, то как вариант во многих IDE есть альтернативный запуск в конце которого появляется «Press any key to continue. «. Я бы сказал во всех, но не уверен, так как пробовал лишь самые популярные. |
Это про что?
Белик Виталий 🙂
Регистрация: 23.07.2007
Сообщений: 57,792
system(«pause»); |
Я бы лучше написал cin.get(); Где-то слышал что System лучше избегать.
Это про что? |
Это про то что некоторые компиляторы после выполнения программы не скрывают окно, если в программе не прописано ожидать нажатия клавиши, а наоборот ждут нажатия Энтера. Обычно такие фички настроены в универах.
I’m learning to live.
Последний раз редактировалось Stilet; 18.09.2009 в 14:58 .
Форумчанин
Регистрация: 18.08.2009
Сообщений: 289
А кстати, для чего в конце программы размещен return 0; ? Пробовал указывать вместо нуля другие цифры — вроде как ничего не меняет.
Регистрация: 22.09.2009
Сообщений: 4
Дарова
Любая функция в С++ должна возвращать значение или не возвращать.
В первом случае в начале обявления функции пишется имя возвращаемого типа например: «int myfunct(передаваемые значения)».
Во втором cлучае вначале пишется слово «void».
«return» это возврщаемое значение функции main (точки входа).
Если вначале любой функции не стоит «void» она обязательно должна
возвращать значение. Тут у тебя стоит «int main(. )» а значит
функция должна возвращать тип «int»(целочисленное значение). А
в твоем случае функции «main» возвращать то нечего. Поэтому ради приличия (и не только) пишут «return 0».
Источник: www.programmersforum.ru
C++. Как не отображать завершение процесса в консоли?
Чтобы автоматически закрывать консоль при остановке отладки, включите параметр «Сервис» ->»Параметры» ->»Отладка» -> «Автоматически закрыть консоль при остановке отладки».
Ответ написан более двух лет назад
Нравится 2 4 комментария
но мне не нужно закрывать консоль, там так, программа работает как надо все выводит, есть результат и вот это то что на фото, можно ли это не отоброжать?
не в отладке это не должно выводиться.
Как запускаете файл, что такое сообщение выводится?
не в отладке не выводится, все нормально, только в отладке такое
ну я так понял изменить нельзя, все же спасибо!)
Ответы на вопрос 1
Нужно прописать в конце программы system(«pause»); Потом нужно собрать решение, потому что внутри IDE консоль удерживается и насколько знаю даже не закрывается командами exit(0). Если у тебя Visual Studio, Нажми на «Сборка — собрать решение», потом перейди в папку с проектом и в Debug будет exe файл твоей программы.
Источник: qna.habr.com