Copyright (c) 2008, Sun Microsystems, Inc. All Rights Reserved
The contents of this file are subject to the terms of the Common Development and Distribution License (the "License"). You may not use this file except in compliance with the License.
You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE or http://www.opensolaris.org/os/licensing. See the License for the specific language governing permissions and limitations under the License.
When distributing Covered Code, include this CDDL HEADER in each file and include the License file at usr/src/OPENSOLARIS.LICENSE. If applicable, add the following below this CDDL HEADER, with the fields enclosed by brackets "[]" replaced with your own identifying information: Portions Copyright [yyyy] [name of copyright owner]
/usr/bin/ctrun [options] command [ argument]...
The ctrun utility starts a command in a newly created process contract. ctrun holds the contract and can be instructed to output or respond to events that occur within the contract.
For additional information about process contracts, see contract(4) and process(4).
The following options are supported:
-A fmri aux
Sets the process contract creator's auxiliary field.
-i event,[event ...]
-f event,[event ...]
Sets the informative and fatal events, respectively. The following are valid events:
core
A member process dumped core. core events are informative by default.
empty
The last member of the process contract exited.
exit
A member process exited.
fork
A process was added to the process contract.
hwerr
A member process encountered a hardware error. hwerr events are fatal by default.
signal
A member process received a fatal signal from a process in a different process contract.
-F fmri
Sets the process contract service FMRI field. To set this field the caller is required to have the {PRIV_CONTRACT_IDENTITY} in its effective set.
-l lifetime
The following valid lifetime values are supported:
child
ctrun exits when the command exits, regardless of whether the contract is empty.
contract
ctrun exits only when the contract exits. This is the default.
none
ctrun exits immediately, orphaning the contract.
-o option,[option ...]
The following options are supported:
noorphan
Kills all processes in the contract if the holder (ctrun) exits. This option is invalid when a lifetime of none is specified.
pgrponly
If a fatal error occurs, kills at most the process group of which the errant process is a member.
regent
The contract inherits inheritable contracts when abandoned by member processes.
-r count
If the contract encounters a fault, this option attempts to restart the command count times. If count is 0, the attempt to restart continues indefinitely. By default, ctrun does not attempt to restart the command. This option is invalid if a lifetime other than contract is specified or if the pgrponly option is used.
-t
If the contract created by ctrun inherited subcontracts from its member processes, attempts to transfer them to the new contract when restarting. This option is invalid unless -r is also specified.
-v
Displays contract events and ctrun actions as they occur.
-V
Displays verbose contract events, as are displayed by the -v option of ctwatch. Implies -v.
The following operands are supported:
argument
One of the strings treated as an argument to command.
command
The command to be passed to execvp(2). See exec(2).
Example 1 Running a Shell in a New Process Contract
The following example runs a shell in a new process contract:
example% ctrun -l child -o pgrponly ksh
The -l child option argument is specified so that ctrun won't wait until all children of the shell have exited. -o pgrponly is specified because an interactive ksh puts each job in a new process group, and an error in one job is unlikely to affect the others.
Example 2 Running a Simple Server
The following example runs a simple server:
example% ctrun -r 0 -t -f hwerr,core,signal server
The -r 0 and -t options are specified to indicate that if the server encounters a fatal error, ctrun should try to restart it. The -f option makes "hwerr", "core", and "signal" fatal events.
If command is specified and successfully invoked (see exec(2)), the exit status of ctrun is the exit status of command. Otherwise, ctrun exits with one of the following values:
123
The child process exited abnormally.
124
ctrun encountered an internal error.
125
Invalid arguments were provided to ctrun.
126
command was found but could not be invoked.
127
command could not be found.
See attributes(5) for descriptions of the following attributes:
ATTRIBUTE TYPE | ATTRIBUTE VALUE |
Interface Stability | See below. |
Human Readable Output is Uncommitted. Invocation is Committed.
ctstat(1), ctwatch(1), exec(2), contract(4), process(4), attributes(5)