Accessing Child Process Exit Code from 16-Bit Parent ProcessID: Q58437
|
In the Microsoft C Compiler, there is no C run-time function that will return the system exit code from a child process. However, Interrupt 21h SubFunction 4Dh can be used to return it.
Immediately after a child process terminates, the child exit code and the system exit code are in the AL and AH registers, respectively. For example:
_________________________
| | |
AX Register | | | | |
| | |
-------------------------
AH | AL
/ \
/ \
System Exit Code Child Exit Code
When the spawn() family of functions is called with a mode flag of
P_WAIT, only the child exit code is returned. To read the system exit
code, a call to Interrupt 21h SubFunction 4Dh is needed.
/* Compile options needed: none
*/
/* Call this prog1.c */
#include <dos.h>
#include <stdio.h>
#include <process.h>
union REGS inregs, outregs, tempreg;
int retcode;
unsigned char syscode;
void main (void)
{
printf ("In program I\n");
retcode = spawnl (P_WAIT, "sp2.exe", "sp2", NULL);
/* Call int 21h function 4Dh to obtain exit codes */
inregs.h.ah = 0x4d;
intdos (&inregs, &outregs);
/* System Exit Code will be in AH. */
syscode = outregs.h.ah;
printf ("Child exit code: %d\n", retcode);
printf ("Child process ");
switch (syscode)
{
case 0 : printf ("terminated normally\n");
break;
case 1 : printf ("exit with a Control-C\n");
break;
case 2 : printf ("exit with a hard error\n");
break;
case 3 : printf ("exit as a TSR program\n");
break;
}
}
/* Compile options needed: none
*/
/* Call this sp2.c */
#include <stdio.h>
void main (void)
{
printf ("In program II\n");
exit (77);
}
Because C version 6.0 and later have the feature of using inline assembly,
the AX register can be accessed directly without using any interrupts. The
following line of code can be used in place of the interrupt call:
_asm mov syscode, ah
Additional query words: kbinf 5.10 6.00 6.00a 6.00ax 7.00 1.00 1.50
Keywords : kb16bitonly
Version :
Platform :
Issue type :
Last Reviewed: July 26, 1999