* Killing a hung ssh process in a TRAMP session
@ 2010-01-07 7:24 Suvayu Ali
2010-01-07 8:41 ` Michael Albinus
0 siblings, 1 reply; 7+ messages in thread
From: Suvayu Ali @ 2010-01-07 7:24 UTC (permalink / raw)
To: Emacs mailing list
Hi everyone,
I have a small problem. I usually have to develop code remotely.
(usually across the Atlantic :) ) The connection is not always very
stable. Whenever there are any network problems, TRAMP keeps trying to
reconnect to the remote machine.
My problem is whenever TRAMP is trying to reconnect, the whole emacs
session hangs. The only way out of this situation is to wait for the
connection to be established (not always practical as often it might
take over 10 mins for the network to be back to normal) or kill emacs
with `kill -9'. And since I usually run emacs in server mode, this means
loosing a really complicated session with lots of buffers on several
remote machines.
Is there any way I could tell emacs not to reconnect when this happens?
I tried running `ps uf -u `whoami`' and kill the shell running the hung
ssh process. But that only re-spawns the process again.
Is there anyway around this? Hopefully I have explained my predicament
clearly. Thanks for any advice on this.
--
Suvayu
Open source is the future. It sets us free.
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Killing a hung ssh process in a TRAMP session
2010-01-07 7:24 Killing a hung ssh process in a TRAMP session Suvayu Ali
@ 2010-01-07 8:41 ` Michael Albinus
2010-01-07 15:29 ` Suvayu Ali
0 siblings, 1 reply; 7+ messages in thread
From: Michael Albinus @ 2010-01-07 8:41 UTC (permalink / raw)
To: Suvayu Ali; +Cc: Emacs mailing list
Suvayu Ali <fatkasuvayu+linux@gmail.com> writes:
> Hi everyone,
Hi,
> Is there any way I could tell emacs not to reconnect when this
> happens? I tried running `ps uf -u `whoami`' and kill the shell
> running the hung ssh process. But that only re-spawns the process
> again.
>
> Is there anyway around this? Hopefully I have explained my predicament
> clearly. Thanks for any advice on this.
Usually, you should be able to interrupt Tramp's activities by
C-g. Which version of Tramp do you use? You find it out by
"C-h v tramp-version".
Furthermore, there are some commands to close a connection.
"M-x tramp-cleanup-connection" allows you to close a connection.
"M-x tramp-cleanup-all-connections" closes all existing connections, and
"M-x tramp-cleanup-all-buffers" does the same, and deletes also related
buffers.
Best regards, Michael.
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Killing a hung ssh process in a TRAMP session
2010-01-07 8:41 ` Michael Albinus
@ 2010-01-07 15:29 ` Suvayu Ali
2010-01-07 15:46 ` Michael Albinus
0 siblings, 1 reply; 7+ messages in thread
From: Suvayu Ali @ 2010-01-07 15:29 UTC (permalink / raw)
To: Michael Albinus; +Cc: Emacs mailing list
Hi Michael,
On Thursday 07 January 2010 12:41 AM, Michael Albinus wrote:
> Suvayu Ali<fatkasuvayu+linux@gmail.com> writes:
>
>> Is there any way I could tell emacs not to reconnect when this
>> happens? I tried running `ps uf -u `whoami`' and kill the shell
>> running the hung ssh process. But that only re-spawns the process
>> again.
>>
>> Is there anyway around this? Hopefully I have explained my predicament
>> clearly. Thanks for any advice on this.
>
> Usually, you should be able to interrupt Tramp's activities by
> C-g. Which version of Tramp do you use? You find it out by
> "C-h v tramp-version".
>
My version of tramp is 2.1.15, Emacs 23.1.1.
> Furthermore, there are some commands to close a connection.
> "M-x tramp-cleanup-connection" allows you to close a connection.
> "M-x tramp-cleanup-all-connections" closes all existing connections, and
> "M-x tramp-cleanup-all-buffers" does the same, and deletes also related
> buffers.
>
These will be a lot of help when emacs is still responsive, thanks. But
usually when this happens, all the frames associated to the emacs server
freezes, and doesn't respond to any keyboard or mouse input. I also see
similar behaviour whenever TRAMP is busy with the network, say
authenticating to the remote server. As soon as its done, every thing
goes back to normal. Maybe I should have taken screen shots. :-\
> Best regards, Michael.
Thanks a lot for the response, I will try to take some screen shots the
next time this happens.
--
Suvayu
Open source is the future. It sets us free.
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Killing a hung ssh process in a TRAMP session
2010-01-07 15:29 ` Suvayu Ali
@ 2010-01-07 15:46 ` Michael Albinus
2010-01-14 6:23 ` Suvayu Ali
0 siblings, 1 reply; 7+ messages in thread
From: Michael Albinus @ 2010-01-07 15:46 UTC (permalink / raw)
To: Suvayu Ali; +Cc: Emacs mailing list
Suvayu Ali <fatkasuvayu+linux@gmail.com> writes:
> These will be a lot of help when emacs is still responsive,
> thanks. But usually when this happens, all the frames associated to
> the emacs server freezes, and doesn't respond to any keyboard or mouse
> input. I also see similar behaviour whenever TRAMP is busy with the
> network, say authenticating to the remote server. As soon as its done,
> every thing goes back to normal. Maybe I should have taken screen
> shots. :-\
Please apply
(setq debug-on-error t
debug-on-signal t
debug-on-quit t)
before the next test. Then, when Emacs hangs, you could try from a shell
# kill -FPE <emacspid>
Don't ask me why, but sometimes Emacs comes back with the FPE signal,
and you get a backtrace. This I would like to see, because then I could
protect that code with-local-quit and friends.
Best regards, Michael.
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Killing a hung ssh process in a TRAMP session
2010-01-07 15:46 ` Michael Albinus
@ 2010-01-14 6:23 ` Suvayu Ali
2010-01-17 12:23 ` Michael Albinus
0 siblings, 1 reply; 7+ messages in thread
From: Suvayu Ali @ 2010-01-14 6:23 UTC (permalink / raw)
To: Michael Albinus; +Cc: Emacs mailing list
[-- Attachment #1: Type: text/plain, Size: 1675 bytes --]
Hi Michael,
Sorry for the delay in my response, got a little busy with work.
On Thursday 07 January 2010 07:46 AM, Michael Albinus wrote:
> Suvayu Ali<fatkasuvayu+linux@gmail.com> writes:
>
>> These will be a lot of help when emacs is still responsive,
>> thanks. But usually when this happens, all the frames associated to
>> the emacs server freezes, and doesn't respond to any keyboard or mouse
>> input. I also see similar behaviour whenever TRAMP is busy with the
>> network, say authenticating to the remote server. As soon as its done,
>> every thing goes back to normal. Maybe I should have taken screen
>> shots. :-\
>
> Please apply
>
> (setq debug-on-error t
> debug-on-signal t
> debug-on-quit t)
>
> before the next test. Then, when Emacs hangs, you could try from a shell
>
> # kill -FPE<emacspid>
>
> Don't ask me why, but sometimes Emacs comes back with the FPE signal,
> and you get a backtrace. This I would like to see, because then I could
> protect that code with-local-quit and friends.
>
These are the steps I took to generate the backtrace, after setting the
variables as you requested.
* Opened a remote file and edited it.
* Disconnected my network connection.
* Tried to save the file with `C-x C-s'
* After emacs hung, I took a screenshot
* Killed emacs with `kill -FPE <emacs_pid>'
* Copied the backtrace to a buffer, saved it as raw-text.
* Executed the kill command again (as emacs was still unresponsive)
I have attached the screenshot and the text file with the backtrace.
Hope this will help. And as always, thanks for the help.
> Best regards, Michael.
--
Suvayu
Open source is the future. It sets us free.
[-- Attachment #2: hung-emacs.png --]
[-- Type: image/png, Size: 20637 bytes --]
[-- Attachment #3: tramp-traceback-2.txt --]
[-- Type: text/plain, Size: 5987 bytes --]
Debugger entered--Lisp error: (arith-error)
accept-process-output(#<process *tramp/ssh lxplus*> 1 nil)
byte-code("Æ\b\x06\0ÇÈÉ $\x12\vB\x13Ê\f\b\r#\x16\vÈ" [timeout with-timeout-tag with-timeout-timer with-timeout-timers proc timeout-msecs run-with-timer 1 nil with-timeout-handler accept-process-output with-timeout-value] 6)
tramp-accept-process-output(#<process *tramp/ssh lxplus*> 1)
tramp-wait-for-regexp(#<process *tramp/ssh lxplus*> nil "\r?\n///ff2516d703f6a0738e269a12ea812c6f\r?\n")
tramp-wait-for-output(#<process *tramp/ssh lxplus*>)
tramp-send-command(["ssh" nil "lxplus" "/afs/cern.ch/user/s/sali/public/athena/15.5.3.11/DataQuality/DataQualityTools/DataQualityTools/DQTMuonIDTrackTool.h"] "test -e /afs/cern.ch/user/s/sali/public/athena/15.5.3.11/DataQuality/DataQualityTools/DataQualityTools/DQTMuonIDTrackTool.h 2>/dev/null; echo tramp_exit_status $? ")
tramp-send-command-and-check(["ssh" nil "lxplus" "/afs/cern.ch/user/s/sali/public/athena/15.5.3.11/DataQuality/DataQualityTools/DataQualityTools/DQTMuonIDTrackTool.h"] "test -e /afs/cern.ch/user/s/sali/public/athena/15.5.3.11/DataQuality/DataQualityTools/DataQualityTools/DQTMuonIDTrackTool.h")
tramp-handle-file-exists-p("/ssh:lxplus:/afs/cern.ch/user/s/sali/public/athena/15.5.3.11/DataQuality/DataQualityTools/DataQualityTools/DQTMuonIDTrackTool.h")
apply(tramp-handle-file-exists-p "/ssh:lxplus:/afs/cern.ch/user/s/sali/public/athena/15.5.3.11/DataQuality/DataQualityTools/DataQualityTools/DQTMuonIDTrackTool.h")
tramp-sh-file-name-handler(file-exists-p "/ssh:lxplus:/afs/cern.ch/user/s/sali/public/athena/15.5.3.11/DataQuality/DataQualityTools/DataQualityTools/DQTMuonIDTrackTool.h")
apply(tramp-sh-file-name-handler file-exists-p "/ssh:lxplus:/afs/cern.ch/user/s/sali/public/athena/15.5.3.11/DataQuality/DataQualityTools/DataQualityTools/DQTMuonIDTrackTool.h")
tramp-file-name-handler(file-exists-p "/ssh:lxplus:/afs/cern.ch/user/s/sali/public/athena/15.5.3.11/DataQuality/DataQualityTools/DataQualityTools/DQTMuonIDTrackTool.h")
file-exists-p("/ssh:lxplus:/afs/cern.ch/user/s/sali/public/athena/15.5.3.11/DataQuality/DataQualityTools/DataQualityTools/DQTMuonIDTrackTool.h")
tramp-handle-file-attributes("/ssh:lxplus:/afs/cern.ch/user/s/sali/public/athena/15.5.3.11/DataQuality/DataQualityTools/DataQualityTools/DQTMuonIDTrackTool.h")
apply(tramp-handle-file-attributes "/ssh:lxplus:/afs/cern.ch/user/s/sali/public/athena/15.5.3.11/DataQuality/DataQualityTools/DataQualityTools/DQTMuonIDTrackTool.h")
tramp-sh-file-name-handler(file-attributes "/ssh:lxplus:/afs/cern.ch/user/s/sali/public/athena/15.5.3.11/DataQuality/DataQualityTools/DataQualityTools/DQTMuonIDTrackTool.h")
apply(tramp-sh-file-name-handler file-attributes "/ssh:lxplus:/afs/cern.ch/user/s/sali/public/athena/15.5.3.11/DataQuality/DataQualityTools/DataQualityTools/DQTMuonIDTrackTool.h")
tramp-file-name-handler(file-attributes "/ssh:lxplus:/afs/cern.ch/user/s/sali/public/athena/15.5.3.11/DataQuality/DataQualityTools/DataQualityTools/DQTMuonIDTrackTool.h")
file-attributes("/ssh:lxplus:/afs/cern.ch/user/s/sali/public/athena/15.5.3.11/DataQuality/DataQualityTools/DataQualityTools/DQTMuonIDTrackTool.h")
tramp-handle-verify-visited-file-modtime(#<buffer DQTMuonIDTrackTool.h>)
apply(tramp-handle-verify-visited-file-modtime #<buffer DQTMuonIDTrackTool.h>)
tramp-sh-file-name-handler(verify-visited-file-modtime #<buffer DQTMuonIDTrackTool.h>)
apply(tramp-sh-file-name-handler verify-visited-file-modtime #<buffer DQTMuonIDTrackTool.h>)
tramp-file-name-handler(verify-visited-file-modtime #<buffer DQTMuonIDTrackTool.h>)
verify-visited-file-modtime(#<buffer DQTMuonIDTrackTool.h>)
basic-save-buffer()
save-buffer()
#[(buffer) "r\bqÁ )" [buffer save-buffer] 1](#<buffer DQTMuonIDTrackTool.h>)
map-y-or-n-p(#[(buffer) "Å\b!
V\0Æ\b!
V\0Ç\b!?
V\0È\b!+\0
V\0\bq\n
V\0É ÊV
V\0Ë !;\0r\bq )
V\0\vA\0ÌÌ\x14È\b!P\0ÍÎÈ\b!\"ÍÏÐ\b!\"" [buffer pred buffer-offer-save arg queried buffer-live-p buffer-modified-p buffer-base-buffer buffer-file-name buffer-size 0 functionp t format "Save file %s? " "Save buffer %s? " buffer-name] 4] #[(buffer) "r\bqÁ )" [buffer save-buffer] 1] (#<buffer DQTMuonIDTrackTool.h> #<buffer *scratch*> #<buffer *Minibuf-1*> #<buffer tramp-traceback.txt> #<buffer *Minibuf-0*> #<buffer *Messages*> #<buffer *code-conversion-work*> #<buffer *server*> #<buffer *Echo Area 0*> #<buffer *Echo Area 1*> #<buffer *tramp/ssh lxplus*> #<buffer *Completions*>) ("buffer" "buffers" "save") ((18 #[... "\b\r\0Ã ! \x12\x15\0Ä Å\"Æ Ç" [enable-recursive-minibuffers buf other-window-scroll-buffer display-buffer view-buffer #[... "À " [exit-recursive-edit] 1] recursive-edit nil] 3] "view this buffer") (100 #[... "Ã\b!\r\0ÄÅ!)\0Æ \x1f\0ÇÈÉ!!É\x12)\0ÊÈÉ!Ë\"Ì Í" [buf enable-recursive-minibuffers other-window-scroll-buffer buffer-file-name message "Not applicable: no file" ... display-buffer get-buffer-create "*Diff*" view-buffer #[... "À " [exit-recursive-edit] 1] recursive-edit nil] 3] "view changes in this buffer")))
byte-code("Æ\x18\x19Æ\x1a^[Ç Æ\x1c\x1d/\0\r@\x14r\fq\x0e\x18'\0È '\0É\x11Ê )\rA\x15\x11\0*ËÌÍÇ Î\x0e\x19%\x12\x0e\x1ac\0\x0e^[c\0\x0e\x1cZ\0\x0e\x1aÏ=Z\0ÐÑÒ\x0e\x1d\"!^\0ÓÆ!Æ\x16^[É\x13\b|\0\nÔV|\0\v|\0Õ z\0Ö{\0×!," [queried some-automatic files-done abbrevs-done buffer --cl-dolist-temp-- nil buffer-list buffer-modified-p t save-buffer map-y-or-n-p #[(buffer) "Å\b!
V\0Æ\b!
V\0Ç\b!?
V\0È\b!+\0
V\0\bq\n
V\0É ÊV
V\0Ë !;\0r\bq )
V\0\vA\0ÌÌ\x14È\b!P\0ÍÎÈ\b!\"ÍÏÐ\b!\"" [buffer pred buffer-offer-save arg queried buffer-live-p buffer-modified-p buffer-base-buffer buffer-file-name buffer-size 0 functionp t format "Save file %s? " "Save buffer %s? " buffer-name] 4] #[(buffer) "r\bqÁ )" [buffer save-buffer] 1] ("buffer" "buffers" "save") silently y-or-n-p format "Save abbrevs in %s? " write-abbrev-file 0 message "(Some special files were saved without asking)" "(No files need saving)" buffer-save-without-query save-some-buffers-action-alist save-abbrevs abbrevs-changed arg abbrev-file-name] 7)
save-some-buffers(nil)
call-interactively(save-some-buffers nil nil)
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Killing a hung ssh process in a TRAMP session
2010-01-14 6:23 ` Suvayu Ali
@ 2010-01-17 12:23 ` Michael Albinus
2010-01-17 19:18 ` Suvayu Ali
0 siblings, 1 reply; 7+ messages in thread
From: Michael Albinus @ 2010-01-17 12:23 UTC (permalink / raw)
To: Suvayu Ali; +Cc: Emacs mailing list
Suvayu Ali <fatkasuvayu+linux@gmail.com> writes:
> Hi Michael,
Hi,
> These are the steps I took to generate the backtrace, after setting
> the variables as you requested.
>
> * Opened a remote file and edited it.
> * Disconnected my network connection.
> * Tried to save the file with `C-x C-s'
> * After emacs hung, I took a screenshot
> * Killed emacs with `kill -FPE <emacs_pid>'
> * Copied the backtrace to a buffer, saved it as raw-text.
> * Executed the kill command again (as emacs was still unresponsive)
>
> I have attached the screenshot and the text file with the backtrace.
>
> Hope this will help. And as always, thanks for the help.
I could reproduce it. Unfortunately, there is no simple way to solve it
inside Tramp (but I will continue to investigate). Therefore, I have
added the following item to Tramp's Frequently Asked Questions, HTH:
* TRAMP does not recognize hung `ssh' sessions
When your network connection is down, `ssh' sessions might hang.
TRAMP cannot detect it safely, because it still sees a running
`ssh' process. Timeouts cannot be used as well, because it
cannot be predicted, how long a remote command will last, for
example when copying very large files.
Therefore, you must configure the `ssh' process to die in such a
case. The following entry in `~/.ssh/config' would do the job:
Host *
ServerAliveInterval 5
Best regards, Michael.
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Killing a hung ssh process in a TRAMP session
2010-01-17 12:23 ` Michael Albinus
@ 2010-01-17 19:18 ` Suvayu Ali
0 siblings, 0 replies; 7+ messages in thread
From: Suvayu Ali @ 2010-01-17 19:18 UTC (permalink / raw)
To: Michael Albinus; +Cc: Emacs mailing list
Hi Michael,
On Sunday 17 January 2010 04:23 AM, Michael Albinus wrote:
> Suvayu Ali<fatkasuvayu+linux@gmail.com> writes:
>> These are the steps I took to generate the backtrace, after setting
>> the variables as you requested.
>
> I could reproduce it. Unfortunately, there is no simple way to solve it
> inside Tramp (but I will continue to investigate). Therefore, I have
> added the following item to Tramp's Frequently Asked Questions, HTH:
Thank you so much for clarifying this issue. :)
> * TRAMP does not recognize hung `ssh' sessions
>
> When your network connection is down, `ssh' sessions might hang.
> TRAMP cannot detect it safely, because it still sees a running
> `ssh' process. Timeouts cannot be used as well, because it
> cannot be predicted, how long a remote command will last, for
> example when copying very large files.
>
> Therefore, you must configure the `ssh' process to die in such a
> case. The following entry in `~/.ssh/config' would do the job:
>
> Host *
> ServerAliveInterval 5
I was thinking something along similar lines, good to see I was on the
correct track. :)
> Best regards, Michael.
Cheers,
--
Suvayu
Open source is the future. It sets us free.
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2010-01-17 19:18 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-01-07 7:24 Killing a hung ssh process in a TRAMP session Suvayu Ali
2010-01-07 8:41 ` Michael Albinus
2010-01-07 15:29 ` Suvayu Ali
2010-01-07 15:46 ` Michael Albinus
2010-01-14 6:23 ` Suvayu Ali
2010-01-17 12:23 ` Michael Albinus
2010-01-17 19:18 ` Suvayu Ali
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.