From: 徐露 <xulu@allwinnertech.com>
To: "musl" <musl@lists.openwall.com>
Cc: "Rich Felker" <dalias@aerifal.cx>
Subject: 回复:[musl] Child process is blocked when debugging with gdb
Date: Wed, 26 Jun 2019 11:06:31 +0800 [thread overview]
Message-ID: <51d8cb97-847d-4cde-93f6-cb8eb487040f.xulu@allwinnertech.com> (raw)
In-Reply-To: <20190621203132.GZ1506@brightrain.aerifal.cx>
[-- Attachment #1: Type: text/plain, Size: 3535 bytes --]
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@Linux:/# 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@Linux:/# 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
[-- Attachment #2: Type: text/html, Size: 10741 bytes --]
prev parent reply other threads:[~2019-06-26 3:06 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-06-11 3:46 徐露
2019-06-21 20:31 ` dalias
2019-06-26 3:06 ` 徐露 [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=51d8cb97-847d-4cde-93f6-cb8eb487040f.xulu@allwinnertech.com \
--to=xulu@allwinnertech.com \
--cc=dalias@aerifal.cx \
--cc=musl@lists.openwall.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.vuxu.org/mirror/musl/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).