[lldb-dev] SBProcess::Detach kills target

Eugene Birukov via lldb-dev lldb-dev at lists.llvm.org
Wed Mar 30 14:49:33 PDT 2016


Right, my bad. The problem was that when debugger detaches the stdio does not go anywhere so I failed to see my printf.
Still, is this how it is supposed to be? I naively assume that if we don't send SIGHUP in attach scenario we should not send it in launch scenario too.
Thanks,Eugene

> From: labath at google.com
> Date: Wed, 30 Mar 2016 10:22:33 +0100
> Subject: Re: [lldb-dev] SBProcess::Detach kills target
> To: eugenebi at hotmail.com
> CC: jingham at apple.com; lldb-dev at lists.llvm.org
> 
> So I have made a small test program (which does nothing but spin in a
> loop), and indeed it is the SIGHUP that kills it after detach. If the
> test program blocks the signal, then it continues running even after
> detach:
> $ cat a.c
> #include <unistd.h>
> #include <signal.h>
> 
> int main() {
>     signal(SIGHUP, SIG_IGN);
>     for (;;) sleep(1);
> }
> $ cc a.c -g
> $ ps -A | grep a.out
> $ ~/ll/build/dbg/bin/lldb ./a.out
> (lldb) target create "./a.out"
> Current executable set to './a.out' (x86_64).
> (lldb) b 6
> Breakpoint 1: where = a.out`main + 19 at a.c:6, address = 0x0000000000400590
> (lldb) r
> Process 13416 launched: './a.out' (x86_64)
> Process 13416 stopped
> * thread #1: tid = 13416, 0x0000000000400590 a.out`main + 19 at a.c:6,
> name = 'a.out', stop reason = breakpoint 1.1
>     frame #0: 0x0000000000400590 a.out`main + 19 at a.c:6
>    3
>    4   int main() {
>    5      signal(SIGHUP, SIG_IGN);
> -> 6      for (;;) sleep(1);
>    7   }
> (lldb) detach
> Process 13416 detached
> (lldb) q
> $ ps -A | grep a.out
>  13416 ?        00:00:00 a.out
> 
> 
> On 29 March 2016 at 18:38, Eugene Birukov <eugenebi at hotmail.com> wrote:
> > I believe this is not SIGHUP on debugger exit. I am using my own C++ program
> > that calls into LLDB API. So, this program is still alive after calling
> > SBProcess::Detach() but the target dies. Also, the target intercepts SIGHUP
> > to do cleanup before exiting. I put printf there, it was not hit.
> The fact whether your program is alive irrelevant. What matters is
> that by cleaning up the process structure, we will also close the
> master end of the pty used for inferior communication, and this is
> what causes the SIGHUP. For that reason you also cannot use a printf
> to do diagnostics as the output has nowhere to go. Note that lldb's
> behavior here will be different from gdb as gdb does not do stdio
> redirection, and has the inferior share the pty with the debugger (in
> which case your program will die when you close the terminal window).
> 
> >
> > I tried interactive LLDB, the target is not there:
> >
> > Process 49145 stopped
> > * thread #1: tid = 49145, ..., stop reason = signal SIGSTOP
> >     frame #0: 0x00007ffff6a5bbed libc.so.6 at syscall-template.S:81
> > (lldb) detach
> > Process 49145 detached
> > (lldb) q
> > eugene at EUGENEBI-L1:~/tmp$ ps
> >   PID TTY          TIME CMD
> > 30714 pts/17   00:00:00 bash
> > 49259 pts/17   00:00:00 ps
> Note that the inferior will not show up here even if it exists, as ps
> will only list the processes with the same tty, but at this point the
> inferior process has no tty.
> 
> Good luck with your investigations.
> 
> pl
 		 	   		  
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-dev/attachments/20160330/f230b844/attachment.html>


More information about the lldb-dev mailing list