Когда я запускаю сеанс SSH, который выполняет длительную команду, что происходит с обработкой Ctrl+ C(SIGINT)?
Я вижу, что сессия SSH закрыта, но я не уверен, кто первым получит SIGINT: это ...
удаленная долгосрочная команда? то есть (а) обработчик сигнала в удаленной команде вызывается и останавливает удаленную команду, (б) порожденная им оболочка обнаруживает, что команда остановлена, а также останавливается (в) удаленный sshd обнаруживает остановленную оболочку, поэтому он закрывает соединение
или
локальный ssh получает сигнал и закрывает соединение.
Я думаю, что (1) происходит, но хочу убедиться.
Я также не уверен в том, что происходит с обработкой оболочки SIGINT в этом случае. Например, если я ...
ssh remote 'while true ; do sleep 1 ; date ; done'
и Ctrl+ C, тогда удаленное соединение сбрасывается. Есть ли способ запустить удаленную команду из оболочки, которая останется в живых после Ctrl+ C? То есть в этом случае остановить цикл и разрешить мне продолжать работать с удаленной оболочкой?
ssh remote command
в отличие отssh remote
) будет уничтожен (на локальной стороне) SIGINT, сгенерированным путем ввода ctrl-C. Удаленная сторона, вероятно, (в зависимости от ОС) будет работать до тех пор, пока не попытается выполнить чтение или запись в закрытый сокет. Если вы хотите, чтобы все нажатия клавиш, включая ctrl-C, передавались на удаленный компьютер, используйтеssh remote
.