-
-
Save zaius/782263 to your computer and use it in GitHub Desktop.
ctrl-z | |
bg | |
touch /tmp/stdout | |
touch /tmp/stderr | |
gdb -p $! | |
# In GDB | |
p dup2(open("/tmp/stdout", 1), 1) | |
p dup2(open("/tmp/stderr", 1), 2) | |
detach | |
quit | |
# Back in shell | |
disown | |
logout |
Yeah it's definitely cleaner to do it that way, if you're organized :) I would make it even a simpler and just run it in screen or tmux. Though I know I regularly start long-running tasks before realizing how long they are going to take, so this is a quick hack to get around it.
Thomas, I think you missed the point of the gist. This makes sense if you have a process already running and later realize you need to disown it without losing its output. I for one run into this problem often and I really like this solution.
This was linked on Hacker News and in the comments there julian37 pointed out that someone created a bash script to do this called "Dupx".
http://www.isi.edu/~yuri/dupx/
Edit: And of course, thank you to bringing this tool to my attention. Very useful.
I've not seen it done quite like this before. I like it!
It might be a bit cleaner with something like
nohup $you_command_and_arguments_here 2>/tmp/stderr 1>/tmp/stdout
to avoid the overhead of all theptrace
's that go on in gdb. Also,disown
's implementation is defined to be shell-specific (in other words, do what works for your shell), whereas nohup uses system-level commands to abandon it's parent, so you are less likely to have strange side-effects if you try it on a non-bash shell.