Join GitHub today
GitHub is home to over 28 million developers working together to host and review code, manage projects, and build software together.Sign up
Fetching latest commit…
Cannot retrieve the latest commit at this time.
|Failed to load latest commit information.|
NAME Solaris::ProcessContract - Manage Solaris process contracts via libcontract VERSION 1.01 DESCRIPTION This module allows you to use the libcontract(3) facility to manage contracts for your process and any child processes you create. The process contract system on solaris allows you to group together related processes for monitoring and resource limiting. By default, the child processes you create will live in the same contract group as the parent. The solaris smf init system uses contracts to manage the processes of running services. This allows it do things like restart the service if the number of processes in the contract that the service lives in drops to zero. This makes sense in most scenarios, like when your code is forking off copies of itself for parallelization, since a fault in one process probably means something is wrong with your entire service. However, if your code is forking off worker processes that are unrelated to the parent process, having them all in the same contract is troublesome. For example, if the parent process is a daemon that forks off unrelated worker processes, solaris will fail to detect when the number daemon processes has dropped to zero and the service is unavailable. Since the unrelated worker processes are in the same contract, those are counted against the "is the daemon still running?" checks. To solve this, you need to create a new contract group for any worker processes you fork, so that they have their own space for monitoring and resource limitations and do not affect the parent process. This is also a good practice for any code on solaris that forks off worker processes for long running or resource intensive jobs, as it allows for more accurate resource limits and better tracking of what resources are being used. See: man libcontract man contract man process man smf man svc.startd man ctrun INSTALLATION The libcontract(3) facility was first made available on Solaris 10, so you need to be running at least that to install this module. This module will fail to install if it cannot find "libcontract" while running "Makefile.PL", but does no other checks to forcefully validate your operating system and version. TODO Right now, this module gives you what you need to control the contract system when forking processes. That is going to be the most important need for most people writing daemon software in perl for solaris. Ideally, it could be expanded to be able to fully monitor and acknowledge contract system events. It also would be nice to have access to some of the deeper info when querying contracts, or maybe have a way to tie the proc filesystem in to the contract filesystem so that you could query both. SEE ALSO Solaris::ProcessContract::Template Solaris::ProcessContract::Contract Solaris::ProcessContract::Exceptions libcontract(3) contract(4) process(4) AUTHOR Danny Warren COPYRIGHT Copyright (c) 2013, "AUTHOR". LICENSE This library is free software, you can redistribute it and/or modify it under the same terms as Perl itself.