Skip to content

Conversation

dtfinch
Copy link

@dtfinch dtfinch commented Mar 16, 2014

Before, it would max out a cpu core at 100% while waiting (undesirable if what it's waiting on needs the full cpu). Adding a 1ms sleep reduced its usage to about 1-2% in my case.

Before, it would max out a cpu core at 100% while waiting (undesirable if what it's waiting on needs the full cpu). Adding a 1ms sleep reduced its usage to about 1% in my case.
@AvianFlu
Copy link
Owner

Yeah, I was afraid of that.

Can you try c416218 ? I think that it might actually be the correct solution to this (it will just block the parent completely until the child exits), and would be an improvement over just adding a timeout.

@dtfinch
Copy link
Author

dtfinch commented Mar 16, 2014

Changing WNOHANG to 0 was the first thing I tried, but it was returning prematurely (which seems to contradict the waitpid documentation), so I went with the sleep instead.

@andrasq
Copy link

andrasq commented Oct 1, 2014

I was going to ask for the same thing -- getting rid of the busy-wait.

The blocking waitpid() must still be looped, because a received signal will unblock the wait (even if handled). The fix is to check the return status and block again, something like:

do {
    r = waitpid(child, &status, 0);
} while (r == 0);

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants