1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
#include "process.ih"
bool Process::active()
{
if (d_monitor.pid != 0)
{
int retWaiter = waitpid(d_monitor.pid, &d_monitor.ret, WNOHANG);
if (retWaiter == d_monitor.pid)
{
d_monitor.pid = 0; // process has ended
discontinue(d_child);
}
}
else if (d_child.pid != 0)
{
int retChild = waitpid(d_child.pid, &d_child.ret, WNOHANG);
if (retChild == d_child.pid)
{
d_child.pid = 0; // process has ended
discontinue(d_monitor);
}
}
return d_child.pid;
}
|