Did you know LQ has a Linux Hardware Compatibility List?
Go Back > Forums > Non-*NIX Forums > Programming
User Name
Programming This forum is for all programming questions.
The question does not have to be directly related to Linux and any language is fair game.


  Search this Thread
Old 01-25-2013, 07:50 AM   #1
LQ Newbie
Registered: Jan 2013
Posts: 2

Rep: Reputation: Disabled
How to mix orphan an non orphan child ?

scenario : a remanent daemon spawns different child process depending of incomming tcp requests. Some will be orphan : I do not care of their life or their status. For some others non orphan : I want to get an end status or to know if they crash.

What means an orphan for me in C

struct sigaction sa;
sa.sa_handler = SIG_IGN;
sa.sa_flags = SA_NOCLDWAIT;
sigaction(SIGCHLD, &sa, NULL);

pid = fork

--> no zombie created when child end

For non orphan,

struct sigaction sa;
sa.sa_handler = SIG_DFL;
sa.sa_flags = 0;
sigaction(SIGCHLD, &sa, NULL);

pid = fork
if (pid == 0) {
else {

--> zombie created when child end until I get the status

waitpid(pid, &status, WNOHANG);

// pid could be -1 for many


My problem :

After many non orphan child, when I create my first orphan child, I can't get anymore status of child non orphan. I just get ECHILD error from waitpid when last child end. If I recreate non orphan child, orphan child creates zombie.
It seems impossible to get orphan and non orphan cohabitation.

Did someone find a solution to fix it ? or could point the weakness of my algorithm ?
Old 01-26-2013, 05:45 PM   #2
Senior Member
Registered: Aug 2009
Distribution: CentOS
Posts: 2,349

Rep: Reputation: 978Reputation: 978Reputation: 978Reputation: 978Reputation: 978Reputation: 978Reputation: 978Reputation: 978
The usual way to create a disowned child process is to fork twice:
if((pid = fork()) == 0) {
    if(fork() != 0) exit(0)  /* Intermediate process exits immediately */
    ...          /* Child continues, adopted by process 1 (init) */
/* Parent continues */
waitpid(pid, ...)  /* Reap the intermediate process */

Last edited by rknichols; 01-26-2013 at 05:51 PM. Reason: Accidentally hit "send" too early
Old 01-28-2013, 05:37 AM   #3
LQ Newbie
Registered: Jan 2013
Posts: 2

Original Poster
Rep: Reputation: Disabled

it sounds good
It was in my option list but with the full fork/exec code
I didn't think to this elegant solution with 2 fork piped


Thread Tools Search this Thread
Search this Thread:

Advanced Search

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is Off
HTML code is Off

Similar Threads
Thread Thread Starter Forum Replies Last Post
[SOLVED] About Arch orphan packages Mr. Alex Arch 5 04-13-2012 02:33 PM
[SOLVED] What are the ZombieZombie and Orphan processes anandg111 Linux - Newbie 1 01-05-2012 06:46 AM
ORPHAN (no passwd entry) markus1982 Linux - General 6 08-19-2010 09:57 AM
orphan child process happy78 Programming 3 08-30-2005 02:40 AM
Orphan Processes LiquidPenguin Linux - Newbie 0 07-15-2003 11:54 AM

All times are GMT -5. The time now is 11:29 PM.

Main Menu
Write for LQ is looking for people interested in writing Editorials, Articles, Reviews, and more. If you'd like to contribute content, let us know.
Main Menu
RSS1  Latest Threads
RSS1  LQ News
Twitter: @linuxquestions
Facebook: linuxquestions Google+: linuxquestions
Open Source Consulting | Domain Registration