mtv leaves a zombie after exit
Don Lewis
truckman at FreeBSD.org
Mon May 12 23:01:12 PDT 2003
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;
}
More information about the freebsd-current
mailing list