Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Date: Wed, 26 Jun 2019 11:06:31 +0800
From: "徐露" <xulu@...winnertech.com>
To: "musl" <musl@...ts.openwall.com>
Cc: "Rich Felker" <dalias@...ifal.cx>
Subject: 回复:Child process is blocked when debugging with gdb

On Fri, Jun 21, 2019 at 16:31:32PM -0400, Rich Felker wrote:
> On Tue, Jun 11, 2019 at 11:46:52AM +0800, 徐露 wrote:
> > Hi all,
> > 
> > I use Openwrt project and the version of musl-libc is 1.1.16. 
> > 
> >     I call wordexp() in my programs and it runs well. But when I debug my programs with gdb, it is blocked on wordexp().
> >     After some tests, I found that wordexp() call fork(), and after fork the child process is blocked.
> > 
> >     I write a demo and the source code is as follows.
> > ```
> > #include <stdio.h>
> > #include <unistd.h>
> > int main()
> > {
> >  pid_t pid;
> >  pid = fork();
> >  if (!pid) {
> >   printf("== child process ==\n");
> >   while (1) {
> >    printf("--child--\n");
> >    sleep(1);
> >   }
> >  }
> >  printf("== parent process ==\n");
> >  sleep(20);
> >  return 0;
> > }
> > ```
> > 
> >     The debug log is as follows. 
> > ```
> > root@...ux:/# gdb /test 
> > GNU gdb (GDB) 8.2.1
> > Copyright (C) 2018 Free Software Foundation, Inc.
> > License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
> > This is free software: you are free to change and redistribute it.
> > There is NO WARRANTY, to the extent permitted by law.
> > Type "show copying" and "show warranty" for details.
> > This GDB was configured as "arm-openwrt-linux".
> > Type "show configuration" for configuration details.
> > For bug reporting instructions, please see:
> > <http://www.gnu.org/software/gdb/bugs/>.
> > Find the GDB manual and other documentation resources online at:
> >     <http://www.gnu.org/software/gdb/documentation/>.
> > For help, type "help".
> > Type "apropos word" to search for commands related to "word"...
> > Reading symbols from /test...done.
> > (gdb) show follow-fork-mode 
> > Debugger response to a program call of fork or vfork is "parent".
> > (gdb) show detach-on-fork 
> > Whether gdb will detach the child of a fork is on.
> > (gdb) r
> > Starting program: /test 
> > [Detaching after fork from child process 1697]
> > == parent process ==
> > [Inferior 1 (process 1694) exited normally]
> > (gdb) 
> > ```
> >     When the parent process is sleeping, I get these processes information.
> > ```
> > root@...ux:/# ps | grep test
> >  1692 root     10916 S    gdb /test
> >  1694 root       680 S    /test
> >  1697 root       680 t    /test
> >  1706 root      1072 S    grep test
> > ```
> > 
> > I have set gdb "follow-fork-mode" to "child", the child process can run, but I want to debug the parent process.
> > 
> > Besides, I have tried GDB 7.10.1 and musl-libc 1.1.22, the question still exists.
> > I also have swithed the C library to Glibc, and there is no question.
> > 
> > Could you please give us some pointers, thanks! I can supply more details as needed.
> 
> Sorry I missed this when you first sent it!
> 
> wordexp() reads back output from the child via a pipe, so the child
> will stay blocked on writing to the pipe if it writes more than the
> pipe buffer size without the parent reading anything back. You'll need
> to let the parent advance past these reads before the child can exit.
> 
> Does that help?
Sorry. My description of the question is inaccurate. 
Forget about wordexp. Let's talk about the demo program. The source code is in the last mail.
The question:
The demo program runs well. If I debug the demo program(compile with musl) with gdb, even though the child process is created, but it can not run.

When I debug the demo program(compile with glibc) with gdb, the child process runs well.

Best regards !
xulu
Content of type "text/html" skipped

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.