C/Zombies

From Attie's Wiki
Revision as of 00:02, 18 November 2010 by Inumitope (Talk | contribs)

Jump to: navigation, search

>The code below will quickly tidy up after zombie children, and at the same time check for incoming data.

  • Assume <code>sock</code> is the file descriptor that you wish to read from<br>
  • <code>children</code> is incremented when you call <code>fork()</code>

<source lang="c"> /* tidy up after children, but accept new data if its there! */ while (children) {

 int pid, status, read;
 struct timeval timeout;
 fd_set toset;
 /* check if any children have become zombies! */
 pid = waitpid(-1,&status,WNOHANG | WUNTRACED);
 if (pid > 0) {
   children--;
   printf("*** Child Died ***  PID: %-6d    Status: %-3d    Children: %-2d\n",pid,WEXITSTATUS(status),children);
   /* if there are no children left, will break
      if there are more zombie children will tidy up before looking for data */
   continue;
 }
 /* timeout on the socket every 0.5sec */
 memset(&timeout,0,sizeof(timeout));
 timeout.tv_usec = 500000;
 FD_ZERO(&toset);
 FD_SET(sock,&toset);
 /* check if there is data in the socket to be read... */
 if ((read = select(sock+1,&toset,NULL,NULL,&timeout)) == -1) {
   perror("select()");
   break;
 } else if (read != 0) {
   /* something can be read! */
   break;
 }

} </source>



UNDER COSTRUCTION, PLEASE SEE THIS POST IN RESERVE COPY


CLICK HERE


Personal tools
Namespaces

Variants
Actions
Navigation
Toolbox