[lldb-dev] Process attach and pgid of forked process under Linux

Andrew MacPherson andrew.macp at gmail.com
Wed Mar 26 14:06:11 PDT 2014


Ok that makes sense. I've updated the patch I sent yesterday with a unit
test that exposes the problem as well as a couple of other process attach
issues that were fixed in the last few days. It was in fact this getpgid()
issue that was causing problems when trying to create a unit test earlier
as the problem scenario occurs when the unit test script forks a subprocess
with popen().


On Wed, Mar 26, 2014 at 7:20 PM, Greg Clayton <gclayton at apple.com> wrote:

>
> On Mar 25, 2014, at 12:09 PM, Andrew MacPherson <andrew.macp at gmail.com>
> wrote:
>
> > Ok great, I'm attaching a patch here that just uses getpgid() to
> determine the pgid to use with waitpid(). I get the same unit test results
> before and after the patch (there are a few tests that fail consistently
> for me). I tried using a simple -1 with waitpid() but this results in a
> hang in the unit tests. This is probably something worth investigating but
> for now this patch does resolve the issues around waitpid() when attaching.
>
> We should never use -1 with waitpid() as you could end up reaping a
> process that someone else is already trying to reap. You must only try to
> reap the process that you launched using some pid for you process. Many
> things launch processes within LLDB like ProcessGDBRemote launching
> "debugserver" binaries. The ProcessGDBRemote must be notified when and if
> "debugserver" crashes, so if anyone else does waitpid(-1, ...)
> ProcessGDBRemote might never find out if debugserver crashes for some
> reason.
>
> > I mentioned a few issues I ran into with the unit tests in the email I
> just pinged with a Linux detach patch, basically there appears to be a bug
> or limitation somewhere in that doing a "continue" in asynchronous mode in
> a unit test breaks things and this is needed for most attach-related debug
> testing. I can probably look into this (along with the couple of failing
> tests I have) but likely won't be able to this week. I haven't filed a bug
> for the consistently-failing tests on my end since it doesn't appear to be
> happening for others and I haven't had a chance to investigate here, let me
> know if I should file a bug anyway.
> >
> >
> > On Tue, Mar 25, 2014 at 6:30 PM, Todd Fiala <tfiala at google.com> wrote:
> > I'd suggest trying the change, running the tests, and see if anything
> new fails.
> >
> > And if this fixes currently broken behavior, add a test to make sure we
> don't regress it.  I'm pretty sure if it breaks something we'll know pretty
> quickly (either via bugs or our own usage).  At which point - we should add
> a test so we don't regress in the future and perhaps add a few comments as
> to the reason.
> >
> >
> > On Tue, Mar 25, 2014 at 9:54 AM, <jingham at apple.com> wrote:
> > Why are you waiting for process groups?  That's not something we have to
> do on Mac OS X.
> >
> > Jim
> >
> >
> > On Mar 25, 2014, at 1:17 AM, Andrew MacPherson <andrew.macp at gmail.com>
> wrote:
> >
> > > Currently under Linux if you attach to a process whose process group
> id is not equal to its process id (such as the child process of a fork()
> call) the calls to waitpid() that pass -1*pid will return ECHILD since the
> pid argument refers to a process group that doesn't exist. These calls
> occur in Host::MonitorChildProcessThreadFunction() and the Linux
> ProcessMonitor.
> > >
> > > Changing -1*pid to simply -1 or to -1*getpgid(pid) resolves the issue
> but it's not clear if this is the right fix as I'm unsure how other OSes
> deal with this scenario.
> > >
> > > Any thoughts?
> > >
> > > Thanks,
> > > Andrew
> > > _______________________________________________
> > > lldb-dev mailing list
> > > lldb-dev at cs.uiuc.edu
> > > http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev
> >
> > _______________________________________________
> > lldb-dev mailing list
> > lldb-dev at cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev
> >
> >
> >
> > --
> > Todd Fiala |   Software Engineer |     tfiala at google.com |
> 650-943-3180
> >
> >
> > <waitpid-getpgid.patch>_______________________________________________
> > lldb-dev mailing list
> > lldb-dev at cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-dev/attachments/20140326/549fc80e/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: wait-getpgid+unittest.patch
Type: text/x-diff
Size: 5806 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-dev/attachments/20140326/549fc80e/attachment.patch>


More information about the lldb-dev mailing list