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>
