EPICS Controls Argonne National Laboratory

Experimental Physics and
Industrial Control System

1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  <20082009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024  Index 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  <20082009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024 
<== Date ==> <== Thread ==>

Subject: Re: Creating Zombies with epicsThreadExitMain
From: Michael Abbott <[email protected]>
To: [email protected]
Date: Mon, 12 May 2008 13:15:48 +0000 (GMT)
> To reproduce this, create an EPICS IOC with the following code:
> 
> 	int main()
> 	{
>	    printf("Running iocsh\n");
> 	    iocsh("/dev/null");
>	    printf("Calling epicsThreadExitMain\n");
> 	    epicsThreadExitMain();
> 	}

For what it's worth, here are the last few lines from running

	strace bin/linux-x86/softIoc

on the offending process:

...
write(1, "Running iocsh\n", 14Running iocsh
)         = 14
open("/dev/null", O_RDONLY)             = 3
fstat64(3, {st_mode=S_IFCHR|0666, st_rdev=makedev(1, 3), ...}) = 0
ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, 0xbfe9c790) = -1 ENOTTY (Inappropriate ioctl for device)
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f60000
read(3, "", 4096)                       = 0
close(3)                                = 0
munmap(0xb7f60000, 4096)                = 0
rt_sigprocmask(SIG_SETMASK, ~[RTMIN RT_1], [], 8) = 0
mmap2(NULL, 135168, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f1f000
mprotect(0xb7f1f000, 4096, PROT_NONE)   = 0
clone(child_stack=0xb7f3f4c4, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID|CLONE_DETACHED, parent_tidptr=0xb7f3fbe8, {entry_number:6, base_addr:0xb7f3fba0, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}, child_tidptr=0xb7f3fbe8) = 5730
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
write(1, "Calling epicsThreadExitMain\n", 28Calling epicsThreadExitMain
) = 28
futex(0x7f81a0, FUTEX_WAKE, 2147483647) = 0
_exit(0)                                = ?


Curious.  I would have expected the _exit(0) call to have done everything 
that's necessary.  As far as I can tell from the man page, _exit is pretty 
well guaranteed to terminate the program.

Replies:
Re: Creating Zombies with epicsThreadExitMain Andrew Johnson
RE: Creating Zombies with epicsThreadExitMain Pearson, MR (Matthew)
References:
Creating Zombies with epicsThreadExitMain Michael Abbott

Navigate by Date:
Prev: RE: Creating Zombies with epicsThreadExitMain Michael Abbott
Next: Re: Creating Zombies with epicsThreadExitMain Andrew Johnson
Index: 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  <20082009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024 
Navigate by Thread:
Prev: RE: Creating Zombies with epicsThreadExitMain Michael Abbott
Next: Re: Creating Zombies with epicsThreadExitMain Andrew Johnson
Index: 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  <20082009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024 
ANJ, 02 Sep 2010 Valid HTML 4.01! · Home · News · About · Base · Modules · Extensions · Distributions · Download ·
· Search · EPICS V4 · IRMIS · Talk · Bugs · Documents · Links · Licensing ·