Communicator e3000 MPE/iX Express 1 Based on Release 7.0
> Chapter 6 Technical ArticlesCI Enhancements |
||||||||||||||||
|
CSY enhancements summary:
pinfoSyntax: PINFO ( pin, item [,status] )
Example: :calc PINFO('#P123','IPaddr') Result: 15.192.90.81 Example: :calc PINFO(0,'ExecState') Result: READY Example: :calc PINFO(263,'NumProcesses') Result: 8, $8, %10 Example: :calc PINFO('263','children') Result: 8/277 281 290 155 120 311 296 315 Example: :calc PINFO( decimal( JINFO( '#J123' , 'CIpin'),'NumOpenFiles') Result: 10, $A, %12 Example: setvar i HPPIN (walk up while PINFO( i ,'ProcType') <> 'JSMAIN' do process setvar i PINFO( i, 'parent') tree) endwhile restrictionsPINFO does not allow users to access process data if the same user cannot issue the SHOWPROC command against the target PIN. Thus, SHOWPROC access rules are enforced by PINFO. Specifically, the user must have SM or OP capability, or the user must have AM capability and the target process has the same 'user.account', or the process' 'user.account' matches the user's and JOBSECURITY is low, or the target PIN is actually the user's PIN. Furthermore, certain items have additional restrictions: to obtain the IP address the user needs to posses one of: SM, OP, NM, NA or PM capbilities, which are the same rules enforced by the SHOWCONN utility. To retrieve the program name or the info= string the user needs full access to the PIN. The info= string has any text that resembles a lockword blanked out. Enter ':help showproc all' for more details on access and security rules. pinfo item values and descriptionsLabel Type Description -------------- ------ -------------------------------------------------- Alive bool True if pin is alive (not dead) Boosted bool True if pin's priority has been boosted BoostReason string 'NO BOOST','OWNS PRI SEMA','OWNS SIR','LONG SYS TRANS','BREAK','BLOCKED UNPREEMPTABLE','IPC SERV CONTENTION',LONG USER TRANS','OWNS PRI SEMA PORT', 'PRI OSCILLATION' BoostType string 'NO BOOST','LINEAR','DECAY' Child int pin of first child process ChildPin int same as 'child' Children string list of all descendant pins, format: 'total/pin1 pin2 ... pinN'. Note that truncation is evident when 'total' is greater than number of pins returned, e.g. :setvar x pinfo('123','children') :if wordcnt(x) < ![word(x,'/')] then # truncation occurred... ChildrenPins string same as 'children' CMask int POSIX cmask for file creation security CMMode bool True if pin is currently in CM CMProg bool True if pin is a CM program (PROG filecode) CPUMilliSec int number of milliseconds of CPU Creator int creator pin, usually the parent pin CreatorPin int same as 'creator' CriticalDepth int > 0 means process is critical and cannot be aborted, unless it is waiting on a terminal read EGID int POSIX effective group ID EUID int POSIX effective user ID ExecState string execution state: 'BLOCK MEM MGR','BLOCK CB', 'BLOCK MSG','READY','BLOCK TERM' Exist bool True if the target pin exists in any state Exists bool same as 'exist' FmtCPUMilliSec string formatted CPU time 'MM:SS.mls' or 'HH:MM:SS' FmtEGID string formatted EGID ('account name') FmtEUID string formatted EUID ('user.account') FmtGID string formatted GID ('account name') FmtPID string MPE internal process ID: 'pin reuse_cnt' FmtUID string formatted UID ('user.account') FmtWaitMilliSec string formatted CPU time 'MM:SS.mls' or 'HH:MM:SS' GID int POSIX group ID HasSIR bool true if pin owns a SIR HPEPri int internal priority in the range of 0..32767; a higher number is greater priority InBreak bool true if pin is in break mode Info string * info= string with all lockwords removed InfoString string same as 'info' InitThreadPin int the PIN of the initial thread, 0 if not a thread IntProcType int process type, 0=user, 1=son, 2=usermain, 3=task, 4=system, 5=detach, 6=jsmain IntWaitReason int see 'waitreason' item IPAddr string ** IP address in dotted format (xx.xx.xx.xx) JobNum string job/session ID, '#J|Snnn' JSMAIN int pin of JSMAIN process JSMAINPin int same as 'jsmain' Linear bool true if process priority does not decay LinearPriority bool same as 'linear' MPECmask int internal MPE cmask MPEPri int MPE external priority in the range 0..255; a higher number is less priority NumFilesOpen int number of open files including system files NumOpenFiles int same a 'numopenfiles' NumPINs int number of descendant processes NumProcesses int same as 'numpins' Parent int parent pin ParentPin int same as 'parent' Parm int run/creation parm= value PendingIOCount int total IOs outstanding for pin PendIOs int same as 'pendingiocount' PIN int pin, useful if target pin is a thread PriAfterBoost int pin priority when boost period is over ProcState string 'DYING','DEAD','ALIVE','INITIATE','UNBORN' -- all states but 'alive' are rare ProcType string 'USER','SON','MAIN','TASK','SYSTEM','DETACH','JSMAIN' Program string * MPE or POSIX name of program file ProgramName string same as 'program' PxPID int POSIX PID: 16 bit reuse_cnt, 16 bit PIN QPri string scheduling queue followed by MPE priority QueuePriority string same as 'qpri' SchedQ string scheduling queue, 'AS','BS,'CS','DS','ES' SchedQueue string same as 'schedq' SchedState string 'EXECUTING','READY','SHORT WAIT','LONG WAIT' SecondaryThreads string list of secondary threads in the same format as used by "Children" Setdump bool true if SETDUMP enbabled Sibling int first sibling pin SiblingPin int same as 'sibling' SystemDepth int system code depth, >0 means in system code ThreadID int TIN (thread ID number), 1 for non-threaded processes, > 1 for threaded processes ThreadType string 'NONE','INITIAL','SECONDARY' TIN int same as 'threadid' UID int POSIX user ID UnboostPri int same as 'priafterboost' UserAcct string 'user.account' UserProcess bool true if pin is a user process, process type is 0,1,2 WaitMilliSec int time pin has been waiting (need MI) WaitReason string 'PAGE FLT NM CODE','PAGE FLT NM STK','PAGE FLT NM TRANSIENT','PAGE FLT FILE','PAGE FLT CM CODE', 'PAGE FLT CM STK','PAGE FLT CM TRANSIENT' (above 7 require MI),'TERMINAL READ','TERMINAL WRITE', 'DISC IO','OTHER IO','IPC TRANS COMPLETE','SIR', 'RIN','MM PREFETCH','EXPIRED QUANTUM','TIMER', 'PARENT','CB','CHILD','DATA COMM','RIT','DISP WORK','PORT','MAIL','JUNK','MSG','IMPEDE','BREAK', 'WAIT QUEUE','MEM MGR','PORT BLOCK','FILE BLOCK', 'FILE UNBLOCK','STORAGE MGT','DEBUG MSG','IO CONF', 'PFP REPLY','DBMON','FILL DISC','HILO','FS TERM IO', 'MM POST','SIG TIMER','PREEMPTION','DISC IO PREMPTION','PRI PREEMPTION','SQL LOCK','SQL LATCH' 'SQL BUFF','LONG PAUSE','MM FREEZE','RELEASE', 'DEFERRED PREEMPT','MM PSEUDO IO READ','MM PSEUDO IO WRITE','OTHER','NOT WAITING','DEAD PROCESS' WG string workgroup name WorkGroup string same as 'wg'* indicates further restrictions apply to these items: you must have SM capability, or the PIN must be you, or the user.account of the PIN must be the same as your user.account and JOBSECURITY is low. Otherwise, the item is not returned and an error is generated. ** indicates you must have at least one of SM,OP,NA,NM,PM capabilities. PINFO is a CI interface to the AIFPROCGET Architected Interface. In many cases there is a one-to-one mapping of a PINFO item and the associated item retrieved via AIFPROCGET. However, there are also many PINFO items that are formatted based on the raw data returned by the AIF. Below are a few notes on a subset of the returned PINFO items. children - as mentioned above, the format for the returned string of all decendant processes is: 'NNN/pin1 pin2 ... pinN', where the actual (real) number of descendants is returned to the left of the '/' delimiter. CI string variables are currently limited to 1024 characters, and thus, subject to truncation if there are a large number of descendant processes. Even if the returned string is truncated the number left of the '/' is the true number of descendants. The easiest way to detect truncation is to compare the number of tokens in the returned string versus the first number in the string. For example: setvar kids PINFO('1234', 'children') setvar num_tokens WORDCNT(kids) # '/' is not a delimiter to WORDCNT setvar num_kids ![WORD(kids, '/')] # convert to integer if num_kids <> num_token then # truncationThere is no work-around for truncation, other than choosing a PIN closer to the end of the process tree. Also note that the target PIN is not counted as a descendant nor is it included in the string of children. The same format and truncation logic applies to the secondarythreads item. cmask - MPE stores a process' file creation default security (cmask) differently from the POSIX representation. PINFO returns the POSIX version and the MPE version of the cmask. For POSIX, the cmask is the ones compliment of the nine file permissions: read, write, execute access for Owner, for Group and for Other. The shell's umask and umask -S commands provide cmask information. The mpecmask item returns the internal MPE cmask as shown below: 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 ------------------|------------------|------------------|--------- |R W X A L TdRdCdDd|R W X A L TdRdCdDd|R W X A L TdRdCdDd|I x x x x| ------------------|------------------|------------------|--------- OWNER GROUP OTHERwhere 'A' is append access, 'L' is lock access, 'Td' is traverse directory entries permission, 'Rd' is read directory entries permission, 'Cd' is create directory entries permissions, 'Dd' is delete directory entries permission, and 'I' is an ACD validity bit. POSIX read access is granted if the 'R' or 'Rd' bits are set. POSIX write access is granted if the 'W', 'Cd', or 'Dd' bits are set. POSIX execute access is granted if the 'X' or 'Td' bits are set. fmtcpumillisec - returns the same formatted time as shown by :SHOWPROC. The initial format is: MM:SS.milliseconds. Once this format overflows it is automatically converted to HH:MM:SS. The same formatting applies to fmtwaitmillisec. fmtpid - a process ID (PID) is unique for the life of the system. It consists of 32 bits of a PIN and 32 bits of a reuse count. Since the CI does not yet support 64 bit numbers, the formatted MPE PID is returned in a string. The string contains the ASCII PIN, followed by a single space, followed by the ASCII reuse count. The pxpid is the POSIX PID and consists of the 16 bit reuse count followed by the 16 bit PIN. This value is returned as a 32 bit CI integer, and is the same number seen in the shell's 'ps' command output. program - if the program filename can be representated in MPE syntax then it is returned in the traditional MPE 'file.group.account' format. Otherwise, the program name is returned in POSIX (HFS) syntax as an absolute pathname. jinfoFour new items have been added to the JINFO function: Executing bool True if the target job exists and is in the INTRO, EXEC* or EXEC states. Scheduled bool True if the target job exists and is in the SCHED state. Suspended bool True if the target job exists and is in the SUSP state. Waiting bool True if the target job exists and is in the WAIT state.ipaddr, the IP address item, now requires the same capabilities as enforced by the SHOWCONN utility and by the :LISTFILE,access command. Namely, one of: SM, OP, NA, NM, or PM capbility is required in order to obtain the IP address of the target session. The cipin and jsmainpin items no longer have special restrictions in place. Any user can retrieve the CI PIN or the JSMAIN PIN for any job/session. CPU time, in both seconds and milliseconds, is now accurate for all jobs and sessions.
|