Jump to content

DosGetPPID: Difference between revisions

From EDM2
Ak120 (talk | contribs)
mNo edit summary
No edit summary
Line 1: Line 1:
{{Legacy
|RepFunc=N/A
|Remarks=This function has been eliminated since OS/2 2.0.
}}
This call allows the caller to obtain the parent process ID for any process.
This call allows the caller to obtain the parent process ID for any process.
This function has been eliminated since OS/2 2.0


==Syntax==
==Syntax==

Revision as of 22:55, 15 September 2017

Legacy Function Warning
It is recommended to use a newer replacement for this function.
Replacement: N/A
Remarks: This function has been eliminated since OS/2 2.0.

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

Example Code

C Binding

#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 */

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 ---- */
#define INCL_DOSPROCESS
#include <os2.h>
#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 ---- */
#define INCL_DOSPROCESS

#include <os2.h>

#define SLEEPTIME   500L
#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 */
}

MASM Binding

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

Related Functions