This is a solution for UNIX/Linux-type OS users and a lot of it is only
related to R in the sense that it can allow you to reconnect to an R
session. I managed to do it and to save history, thanks to helpful
messages from Ista Zahn and Brian Ripley.
To explain this, I will call my two Linux boxes Desktop and Server. I
logged into Desktop, an Ubuntu box, and ran this command:
ps aux | grep ssh
That showed me these ssh processes and a few extraneous things:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
mbmiller 3520 0.0 0.0 46944 4668 pts/5 S+ Jul25 0:23 ssh -X Server
mbmiller 4602 0.0 0.0 47720 5544 pts/9 S+ Aug09 1:07 ssh -X Server
mbmiller 25614 0.0 0.0 45584 3344 pts/11 S+ Sep24 0:00 ssh -X Server
I launched an xterm from which I would try to recapture those ssh
sessions. (Spoiler: This worked for every ssh process.) I was missing
the reptyr binary, so I installed it like so:
sudo apt-get install reptyr
The reptyr man page told me that I had to do this to allow reptyr to work
(I could change the 0 back to 1 after finishing):
$ sudo su
root# echo 0 > /proc/sys/kernel/yama/ptrace_scope
root# exit
After that I just ran reptyr for each process, for example:
reptyr 3520
A few lines of text would appear (the last saying "Set the controlling
tty"), I'd hit "enter" and it would give my my command prompt from my old
shell, or the R prompt if R was running in that shell. I was then able to
save command histories, etc. When I tried to exit from R using q("yes")
it accepted the command, but it did not return my bash prompt. To deal
with that, I tried Brian Ripley's recommendation:
I logged into Server via ssh and ran this command:
ps aux | grep R
Which returned this along with some irrelevant stuff:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
mbmiller 5156 0.0 0.1 213188 9244 pts/1 S+ Aug06 1:00
/share/apps/R-2.15.1/lib64/R/bin/exec/R -q
I tried the kill command...
kill -USR1 5156
...and that returned my bash prompt immediately in the other xterm. R was
done, the .Rhistory looked perfect, and .RData also was there. I logged
into Server, went to the appropriate directory, ran R and found that all
of the objects were there and working correctly.
So that was amazing. I could reattach to the R session and also kill it
without losing history and data. This is a big deal for me because I get
stuck like that about once a year and it's always a huge pain.
Mike
On Tue, 2 Oct 2012, Ista Zahn wrote (off-list):
If you can find the process ID you can try connecting the process to
another terminal with reptyr (https://github.com/nelhage/reptyr), and
then just use savehistory() as usual. You don't say what flavor of Linux
you're dealing with, but it looks like there are packaged versions for
at least Ubuntu, Fedora, and Arch.
On Tue, 2 Oct 2012, Prof Brian Ripley wrote:
Maybe not. On a Unix-alike see ?Signals. If you can find the pid of
the R process and it is still running (and not e.g. suspended),
kill -USR1 <pid>
will save the workspace and history.
Original query:
On Tue, 2 Oct 2012, Mike Miller wrote:
I connected from my desktop Linux box to a Linux server using ssh in an
xterm, but that xterm was running in Xvnc. I'm running R on the server
in that xterm (over ssh). Something went wrong with Xvnc that has
caused it to hang, probably this bug:
https://bugs.launchpad.net/ubuntu/+source/vnc4/+bug/819473
So I can't get back to that ssh session or to R. I had done a bunch of
work in R but the command history hasn't been written out. If I kill R,
I assume the command history is gone. I wish I could somehow cause R to
dump the command history. Is there any way to tell the running R
process to write the history somewhere?
______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.