Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 12 May 2003 23:01:02 -0700 (PDT)
From:      Don Lewis <truckman@FreeBSD.org>
To:        DougB@FreeBSD.org
Cc:        freebsd-current@FreeBSD.org
Subject:   Re: mtv leaves a zombie after exit
Message-ID:  <200305130601.h4D612M7049395@gw.catspoiler.org>
In-Reply-To: <20030512222359.M647@znfgre.qbhto.arg>

next in thread | previous in thread | raw e-mail | index | archive | help
On 12 May, Doug Barton wrote:
> On Mon, 12 May 2003, Terry Lambert wrote:
> 
>> A "ps -gaxl" will print the wait channel, which may be more
>> informative.
> 
>  UID PID PPID CPU PRI NI VSZ RSS MWCHAN STAT  TT    TIME COMMAND
> 1000   0    1   0 -84  0   0   0 -      ZW    p4 0:00.00  (mtvp)
> 
> BTW, inre your question about the shell, it's bash. But, I get the exact
> same results if mtv is started as a child of the shell, as a child of
> windowmaker, or as a child of netscape.

Does this application use Linux threads?  The following code in wait1()
makes me think that if a thread somehow gets orphaned by the parent
Linux process, it will never get reaped.  The exit code for Linux should
probably wait for any child threads to exit.

        LIST_FOREACH(p, &q->p_children, p_sibling) {
                PROC_LOCK(p);
                if (uap->pid != WAIT_ANY &&
                    p->p_pid != uap->pid && p->p_pgid != -uap->pid) {
                        PROC_UNLOCK(p);
                        continue;
                }

                /*
                 * This special case handles a kthread spawned by linux_clone
                 * (see linux_misc.c).  The linux_wait4 and linux_waitpid
                 * functions need to be able to distinguish between waiting
                 * on a process and waiting on a thread.  It is a thread if
                 * p_sigparent is not SIGCHLD, and the WLINUXCLONE option
                 * signifies we want to wait for threads and not processes.
                 */
                if ((p->p_sigparent != SIGCHLD) ^
                    ((uap->options & WLINUXCLONE) != 0)) {
                        PROC_UNLOCK(p);
                        continue;
                }



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200305130601.h4D612M7049395>