[Info-vax] CREPRC MBXUNT (Handle Process Termination)

Craigers01 at gmail.com Craigers01 at gmail.com
Mon Mar 9 14:47:35 EDT 2009


On Mar 9, 2:03 pm, IanMiller <g... at uk2.net> wrote:
> On Mar 9, 5:39 pm, Craiger... at gmail.com wrote:
>
>
>
> > I have some C code running on OpenMVS VAX 6.2. The code creates
> > subprocesses.  I need to perform some clean up tasks when my sub
> > processes terminate. I wrote a function "processTermination", but I
> > can't seem to get it to fire when the sub process terminates. I can't
> > find any example code where anyone is actually doing this. My code is
> > C. Here are the relevant snippets. It runs without error, but the
> > "processTermination" function does not run. I appreciate any
> > assistance!
>
> >         unsigned short int termMbx2;
>
> >         /* Create Termination MBX  */
> >         status = sys$crembx (0,                 /* 0=temp, 1=perm */
> >               &termMbx2,
> >               512,       /* Max message size */
> >               512, /* Buffer space for messages */
> >               prot,
> >               PSL$C_USER,
> >               0,
> >               0,
> >               0);
> >         if (!(status & STS$M_SUCCESS)) {
> >              printf ("  (sys_crembx) Error creating term MBX.\n") ;
> >              show_error (status);
> >              exit(1);
> >         }
>
> >         /* Set AST on Term MBX  */
> >         status = sys$qio(0, termMbx2, IO$_READVBLK,
> >               &termBuf->iosb,
> >               processTermination,
> >               &termBuf,
> >               0, 0, 0, 0, 0, 0);
> >         if (!(status & STS$M_SUCCESS)) {
> >              printf ("  (sys_qio) Error setting qio to Term MBX.\n") ;
> >              show_error (status);
> >              exit(1);
> >         }
>
> >         /* Create the Sub Process linked to the Term Mbx */
> >         status = sys$creprc (&pid, &image_name_d, &command_proc_d,
> >            &log_file, 0, 0, 0, &process_name_d, 0, 0, &termMbx2, 0,
> > 0);
> >         if (!(status & STS$M_SUCCESS)) {
> >            printf ("  (sys_creprc) Error Creating Child process.\n") ;
> >            show_error (status);
> >            sys$exit(status);
> >         }  else {
> >            printf ("  Client Server PID : %08x\n\n",pid);
> >         }
>
> $CREMBX returns a channel number but for $CREPRC you need a unit
> number, I usually feed the channel number to LIB$GETDVI to get the
> unit number.

Thanks a ton! I got it worked out.

Craig



More information about the Info-vax mailing list