fork, tee and a defunct process

From: Eiler, James A. <James.Eiler_at_alcoa.com>
Date: Wed, 28 May 2003 11:11:03 -0400

Hi all,

I don't believe this is solely a Tru64 problem, but any insight would be
appreciated!

I've got a C program that forks. I run the program from a shell script and
pipe the output to a log file. A simplified version of the C code (hello.c)
is as follows:

#include <stdio.h>
#include <unistd.h>

main( )
{
   if( fork( ) == 0 ) {
      printf( "Entering child's code\n" );
      fflush( stdout );

      while( 1 ) {
         printf( "This is a test!\n" );
         fflush( stdout );
         sleep( 5 );
      }
   }
   else {
      printf( "Parent exiting, PID = %d\n", getpid( ) );
      exit( 0 );
   }
}

The command I'm issuing to get this running is:

# hello | tee hello.log&

Stuff gets logged into the log file as expected, but an unexpected "side
effect" is a defunct process:

# ps -ef | grep defunct
eilerja 34718 34734 0.0 - pts/2 0:00.00 <defunct>

When I look for the parent process, it looks like it's tee:

# ps -ef | grep 34734
eilerja 34718 34734 0.0 - pts/2 0:00.00 <defunct>
eilerja 34734 32901 0.0 11:05:48 pts/2 0:00.00 tee hello.log

Any suggestions on how to eliminate the defunct process?

THANKS!

Jim
Received on Wed May 28 2003 - 15:11:46 NZST

This archive was generated by hypermail 2.4.0 : Wed Nov 08 2023 - 11:53:44 NZDT