Process Manager Interface Narayan Desai, Rusty Lusk, Rick Bradshaw
Mar 17, 2016
Process Manager Interface
Narayan Desai, Rusty Lusk, Rick Bradshaw
2
Outline
• PM Functionality• PM Syntax• PM Commands• PM Datatypes• PM Events• PM Examples• PM BNF• PM Schema
3
Process Manager Functionality• Starts process groups, with specification of environments of
application processes, either collectively or on a process-by-process basis– Executable– Arguments– Environment variables– User– Resource limits– Hosts for each process– Working directory
• Queries the state of a running process group, returning some startup parameters
• Delivers signals to all processes in a process group• Terminates a process group• After process group exit, can wait on the group to collect exit
codes and output.
4
Process Manager Syntax
• The Process Manager uses the “less restricted syntax” style presented elsewhere
• Each message to it does three things:1. Describes a process group specification
to be matched or created2. Conveys a command, with arguments3. Specifies an object to be returned
5
Process Manager Commands
• CreateProcessGroup– Takes as input a ProcessGroupSpecification object– Returns a PGID
• GetProcessGroup– Takes as input a ProcessGroup object which is matched against– Returns a ProcessGroups container object containing requested
fields from matched process group instances
• SignalProcessGroup– Takes as input a Process Group object which is matched against– Takes as argument a signal name and the scope of the signal
(top-level processes or also forkees)– Returns requested fields from the process groups signaled
6
Process Manager Commands (cont.)
• KillProcessGroup– Terminates matching process groups
• Best effort to really kill processes, which may require repeated signalling
– Returns the process groups matched• WaitProcessGroup
– Returns exit code information and stream output from matching completed process groups
– Purges such information from the Process Manager state
7
Process Manager Datatypes
• ProcessGroupSpecification– Used as input to CreateProcessGroup
• ProcessGroup– Used as matching description and returned
description in other commands
8
Process Manager Events• Generated when a process group is successfully started:
<Event> <Component>process-manager</Component> <Message>ProcessStart</Message> <Data>29</Data> </Event>
• Generated when a process group terminates:
<Event> <Component>process-manager</Component> <Message>ProcessEnd</Message> <Data>29</Data> </Event>
9
Process Manager Examples - 1<CreateProcessGroup> <ProcessGroupSpecification> <User>desai</User> <Size>8</Size> <Executable>/bin/false</Executable> <CWD>/tmp</CWD> <Diversions> <Diversion> <Range>6-7</Range> <Executable>/bin/true</Executable> <Environment> <Variable> <Name>LD_LIBRARY_PATH</Name> <Value>/local/lib</Value> </Variable> </Environment> <Arguments>
10
Process Manager Examples - 2 <Argument>-v</Argument> </Arguments> </Diversion> </Diversions> <HostSpecification> <Mode>Unordered</Mode> <Value>ccn1 ccn2 ccn3 ccn4 ccn5 ccn6 ccn7 ccn8 </Value> </HostSpecification> </ProcessGroupSpecification></CreateProcessGroup>
11
Process Manager Examples - 3<GetProcessGroup> <ProcessGroup> <PGID>29</PGID> <Processes> <Process> <Host match='false'/> </Process> </Processes> </ProcessGroup></GetProcessGroup>
12
Process Manager Examples - 4ProcessGroups> <ProcessGroup> <PGID>29</PGID> <Processes> <Process> <Host>ccn1</Host> </Process> <Process> <Host>ccn2</Host> </Process> <Process> <Host>ccn3</Host> </Process> <Process> <Host>ccn4</Host> </Process> <Process> <Host>ccn5</Host> </Process> <Process> <Host>ccn6</Host> </Process> <Process> <Host>ccn7</Host> </Process> <Process> <Host>ccn8</Host> </Process> </Processes> </ProcessGroup></ProcessGroups>
13
Process Manager Examples - 5<GetProcessGroup> <ProcessGroup> <PGID>29</PGID> <Status match='false'/> </ProcessGroup></GetProcessGroup>
<ProcessGroups> <ProcessGroup> <PGID>29</PGID> <Status>Finished</Status> </ProcessGroup></ProcessGroups>
14
Process Manager Examples - 6<WaitProcessGroup> <ProcessGroup> <PGID>29</PGID> <ExitStatus> <Status> <Code negate='true'>0</Code> <Host match='false'/> </Status> </ExitStatus> <Output> <Stream> <Name op='re'> stdout | stderr </name> <Value match='false'/> </Stream> </Output> </ProcessGroup></WaitProcessGroup>
15
Process Manager Examples - 7<ProcessGroups> <ProcessGroup> <PGID>29</PGID> <ExitStatus> <Status> <Host>ccn2</Host> <Code>1</Code</Host> </Status> <Status> <Host>ccn6</Host> <Code>255</Code> </Status> </ExitStatus> <Output> <Stream> <Name>stdout</Name>
16
Process Manager Examples - 8 <Value>process 0 on ccn1process 1 on ccn2process 2 on ccn3process 3 on ccn4process 4 on ccn5process 5 on ccn6process 6 on ccn7process 7 on ccn8</Value> </Stream> <Stream> <Name>stderr</Name> <Value/> </Stream> </Output> </ProcessGroup></ProcessGroups>
17
Process Manager BNF - 1[InMsg] ::= [CreateCommand] | [Query][CreateCommand] ::= <CreateProcessGroup> [PGSpecification] </CreateProcessGroup>[PGSpecification] ::= <ProcessGroupSpecification> [PGSattrs] </ProcessGroupSpecification>[PGSattrs] ::= [PGSattr] | [PGSattr] [PGSattrs][PGSattr] ::= <[FieldName]>[FieldValue]</[FieldName]>[Query] ::= <[ArgCmd] [Arguments]> [ProcessGroup] </[ArgCmd]> | <[Command]> [ProcessGroup] </[Command]>[Command] ::= KillProcessGroup | GetProcessGroup | WaitProcessGroup[ArgCmd] ::= SignalProcessGroup[Arguments] ::= [] | [Argument] | [Argument] [Arguments][Argument] ::= [identifier]=[identifier][ProcessGroup] ::= <ProcessGroup> [Fields] </ProcessGroup>[Fields] ::= [Field] | [Field] [Fields]| [MultiField] | [MultiField] [Fields]
18
Process Manager BNF - 2[Field] ::= <[FieldName]> [FieldValue] </[FieldName]>[FieldName] ::= PGID|User|Size|Executable[FieldValue] ::= identifier[MultiField] ::= <[FieldGroup]> [MFields] </[FieldGroup]>[MFields] ::= [MField] | [MField] [MFields][MField] ::= <[MFName] [Qualifiers]>[MFValue]</[MFName]>[Qualifiers] ::= [] | [Qualifier] [Qualifiers][Qualifier] ::= [BooleanKey]=[BooleanValue]| [StringKey]=[StringValue][BooleanKey] ::= 'negate' | 'match' | 'return'[BooleanValue] ::= 'true' | 'false'[StringKey] ::= 'op'[StringValue] ::= 'eq' | 'ne' | 'lt' | 'gt' | 'le' | 'ge' | 'range' | 're'[MFName] ::= HostSpec | Environment | Diversions[MFValue] :: identifier
19
Process Manager Schema - 1<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xml:lang="en"> <xsd:annotation> <xsd:documentation> Process Manager component schema SciDAC SSS project, 2004 Andrew Lusk [email protected] Narayan Desai [email protected] </xsd:documentation> </xsd:annotation>
<xsd:simpleType name='BooleanType'> <xsd:restriction base='xsd:string'> <xsd:pattern value='true|false'/> </xsd:restriction> </xsd:simpleType>
<xsd:simpleType name='IntegerOps'> <xsd:restriction base='xsd:string'> <xsd:pattern value='eq|lt|gt|range|re'/> </xsd:restriction> </xsd:simpleType>
<xsd:simpleType name='StringOps'> <xsd:restriction base='xsd:string'> <xsd:pattern value='eq|re'/> </xsd:restriction> </xsd:simpleType>
20
Process Manager Schema - 2 <xsd:simpleType name='Signals'> <xsd:restriction base='xsd:string'> <xsd:pattern value='ABRT|ALRM|BUS|CHLD|CLD|CONT|FPE|HUP|ILL|INT|IO|IOT|KILL|PIPE|POLL|PROF|PWR|QUIT|SEGV|STOP|SYS|
TERM|TRAP|TSTP|TTIN|TTOU|URG|USR1|USR2|VTALRM|WINCH|XCPU|XFSZ'/> </xsd:restriction> </xsd:simpleType>
<xsd:attributeGroup name='BaseLRSQuery'> <xsd:attribute name='match' type='BooleanType'/> <xsd:attribute name='negate' type='BooleanType'/> <xsd:attribute name='return' type='BooleanType'/> </xsd:attributeGroup>
<xsd:complexType name='IntegerQueryAttribute'> <xsd:simpleContent> <xsd:extension base='xsd:integer'> <xsd:attributeGroup ref='BaseLRSQuery'/> <xsd:attribute name='op' type='IntegerOps'/> </xsd:extension> </xsd:simpleContent> </xsd:complexType>
<xsd:complexType name='StringQueryAttribute'> <xsd:simpleContent>
21
Process Manager Schema - 3 <xsd:extension base='xsd:string'> <xsd:attributeGroup ref='BaseLRSQuery'/> <xsd:attribute name='op' type='IntegerOps'/> </xsd:extension> </xsd:simpleContent> </xsd:complexType>
<xsd:complexType name='ProcessQueryType'> <xsd:sequence> <xsd:element name='Host' type='StringQueryAttribute' minOccurs='0'/> <xsd:element name='PID' type='StringQueryAttribute' minOccurs='0'/> <xsd:element name='Session' type='StringQueryAttribute' minOccurs='0'/> </xsd:sequence> </xsd:complexType>
<xsd:complexType name='ProcessSet'> <xsd:choice minOccurs='1'> <xsd:element name='Process' type='ProcessQueryType'/> </xsd:choice> </xsd:complexType> <xsd:complexType name='ProcessGroupQuery'> <xsd:sequence> <xsd:element name='PGID' type='IntegerQueryAttribute' minOccurs='0'/>
22
Process Manager Schema - 4 <xsd:element name='Size' type='IntegerQueryAttribute' minOccurs='0'/> <xsd:element name='User' type='StringQueryAttribute' minOccurs='0'/> <xsd:element name='Status' type='StringQueryAttribute' minOccurs='0'/> <xsd:element name='Processes' type='ProcessSet' minOccurs='0'/> </xsd:sequence> </xsd:complexType>
<xsd:complexType name='PGQuery'> <xsd:choice minOccurs='1' maxOccurs='unbounded'> <xsd:element name='ProcessGroup' type='ProcessGroupQuery'/> </xsd:choice> </xsd:complexType>
<xsd:element name='GetProcessGroup' type='PGQuery'/> <xsd:element name='KillProcessGroup' type='PGQuery'/> <xsd:element name='WaitProcessGroup' type='PGQuery'/>
<xsd:element name='SignalProcessGroup'> <xsd:complexType> <xsd:choice minOccurs='1' maxOccurs='unbounded'> <xsd:element name='ProcessGroup' type='ProcessGroupQuery'/> </xsd:choice> <xsd:attribute name='signal' type='Signals' use='required'/> </xsd:complexType> </xsd:element>
</xsd:schema>
23
Notes