[comp.windows.x] child process forces parent to wait?

don@seila.UUCP (Don Kossman) (03/31/89)

Anyone seen this?  What are we doing wrong/not doing?

We have a problem when we fork/exec a child process from an X-window 
application event loop. The parent process will not exit() 
after the fork; it behaves as if there were a wait() statement
(or something else) causing it to wait until the child process exits.

In our case, we are forking and exec'ing a process which
runs a converted bitmap through a print formatter and
sends it to a printer.  This takes quite a while and we
want to run it in the background, without the user having to wait.

Environment: Ultrix 3.0, UWS 2.0, Vaxstation 2000, X11
as distributed by DEC with UWS.

simplified example follows...
-----------------------------------------------------------------
main()
{
   Xopendisplay
   Xmapwindow( sample_window)

   while (1)
    {
        XNextEvent (display, &report);
        switch (report.type)
           {
            case Expose:
                      Xlib calls to draw on the sample_window;
                      break;

            case ConfigureNotify:
                      get width and height of the new resized window;
                      break;

            case ButtonPress:
                      dump sample_window image to an image file;

                      /* child process */
                      if ( (pid = fork() == 0)
                          {
                          execlp("sh", "sh", "-c", command, (char *) 0);
                          /* "command" is a shell script to print
                               the image file and then clean up
                          */  
                          } 

                       /* parent process */
    ? --->             exit(1);  /* We want the sample_window to disappear
                                    right after the fork/exec, but (?)
                                    the exit() does not run till after
                                    the child process exits.
                                  */
            default:
                       break;
           }
     }
}

-- 
Don Kossman, SEI Information Technology, Los Angeles
  ...sun!tsunami!seila!don, -OR- mahendo.jpl.nasa.gov!jplgodo!seila!don