Why can't I detect when the child dies? help.

Joe Garvey garvey at cmic.UUCP
Sat Feb 17 11:19:10 AEST 1990


I'm having a devil of a time with the following scrap of code. It will fork
the child correctly, do all the I/O fine. It's just that the wait from the
parent is never statisfied. The child becomes a zombie process, and won't
go away until the parent is killed. All suggestions greatly appreciated.
E-mail preferred.

PS. I neglected to mention this program works like nice and nohup. The
child program is based on the arguments to the parent command. The name of
my program is "backcon".

nohup sleep 10    #yes I know this is dumb, aren't all trivial examples? :-)
nice sleep 10
backcon sleep 10      #example 1
backcon rm testfile   #example 2

PPS. I'm running HP-UX 6.5 on a HP9000/370. It's a SYSV system with lotsa
BSD features (like the fast file system).


Peoples Exhibit #1: The Offending segment of code.

Mstr_Pty_fd = Open_Pty_Master(Slv_Pty_Name);

if ((Child_Pid = fork()) < 0) then                  /* trap out a failed fork */
   {
   exit(FORK_FAILED);
   }
end_if

if (Child_Pid == 0)                                                  /* child */
   {
   setpgrp();                           /* start a new terminal process group */

   Slv_Pty_fd = Open_Pty_Slave(Slv_Pty_Name);

   close(Mstr_Pty_fd);              /* don't need master side file descriptor */

   close(0);      /* close stdin, stdout, and stderr since they go to old tty */
   close(1);
   close(2);

   dup(Slv_Pty_fd);              /* open new stdin, stdout, stderr to new tty */
   dup(Slv_Pty_fd);
   dup(Slv_Pty_fd);

   close(Slv_Pty_fd);       /* don't need any more, got stdin, stderr, stdout */

                              /* child becomes user program from command line */
   execvp(ArgV[Cmd_Line.Child_Program], ArgV+Cmd_Line.Child_Program);
   }
else                                                                /* parent */
   {
   wait(NULL);
   }
/* end_if */

--
Peoples Exhibit #2: Author of Offending Segment of Code.

Joe Garvey                       UUCP: {apple,backbone}!versatc!mips!cmic!garvey
California Microwave             Internet: garvey%cmic at mips.com
990 Almanor Ave                  HP Desk: garvey (cmic at mips.com) /hp1900/ux
Sunnyvale, Ca, 94086             800-831-3104 (outside CA)
408-720-6439 (let it ring)       800-824-7814 (inside CA)



More information about the Comp.unix.wizards mailing list