DosGetPPID

This call allows the caller to obtain the parent process ID for any process.

Syntax
DosGetPPID (PID, PPID)

Parameters

 * PID (USHORT) - input : The process ID of the process to find the parent PID.
 * PPID (PUSHORT) - output : Address of a word where the process ID of the parent of the indicated process is placed.

Return Code

 * rc (USHORT) - return:Return code descriptions are:
 * 0 NO_ERROR
 * 303 ERROR_INVALID_PROCID

C

 * 1) define INCL_DOSPROCESS

USHORT rc = DosGetPPID(PID, PPID);

USHORT          PID;           /* Process whose parent is wanted */ PUSHORT         PPID;          /* Address to put parent's PID */

USHORT          rc;            /* return code */ 

MASM
 EXTRN DosGetPPID:FAR INCL_DOSPROCESS    EQU 1

PUSH  WORD    PID           ;Process whose parent is wanted PUSH@ WORD    PPID          ;Address to put parent's PID CALL  DosGetPPID

Returns NONE 

Example
The following example demonstrates how to create a process, obtain process ID information, and kill a process. Process1 invokes process2 to run asynchronously. It obtains and prints some PID information, and then kills process2.  /* process1.c  */
 * 1) define INCL_DOSPROCESS
 * 2) include 
 * 3) define START_PROGRAM "process2.exe"  /* Program pointer */

main { CHAR          ObjFail [50];       /* Object name buffer */ RESULTCODES  ReturnCodes;        /* PIDINFO      PidInfo; PID          ParentID;           /* USHORT       rc;

printf("Process1 now running. \n");

/** Start a child process. **/ if(!(DosExecPgm(ObjFail,            /* Object name buffer */                  sizeof(ObjFail),    /* Length of obj. name buffer */                  EXEC_ASYNC,         /* Execution flag - asynchronous */                  NULL,               /* No args. to pass to process2*/                  NULL,               /* Process2 inherits process1's                                          environment */                  &ReturnCodes,       /* Ptr. to resultcodes struct. */                  START_PROGRAM)))    /* Name of program file */ printf("Process2 started. \n");

/** Obtain Process ID information and print it **/ if(!(rc=DosGetPID(&PidInfo)))      /* Process ID's (returned) */ printf("DosGetPID: current process ID is %d; thread ID is %d; parent process ID is %d.\n",           PidInfo.pid, PidInfo.tid, PidInfo.pidParent); if(!(rc=DosGetPPID(          ReturnCodes.codeTerminate, /* Process whose parent is wanted */           &ParentID)))               /* Address to put parent's PID */ printf("Child process ID is %d; Parent process ID is %d.\n",           ReturnCodes.codeTerminate, ParentID);

/** Terminate process2 **/ if(!(rc=DosKillProcess(DKP_PROCESSTREE,    /* Action code - kill process                                                      and descendants */                ReturnCodes.codeTerminate)))  /* PID of root of process tree */ printf("Process2 terminated by process1.\n"); }   /* process2.c  */
 * 1) define INCL_DOSPROCESS


 * 1) include 


 * 1) define SLEEPTIME  500L
 * 2) define RETURN_CODE 0

main { printf("Process2 now running.\n");

/* Sleep to allow process1 to kill it */ DosSleep(SLEEPTIME);               /* Sleep interval */ DosExit(EXIT_PROCESS,              /* Action Code */          RETURN_CODE);               /* Result Code */ } 