"> PROCTL(3)

PROCTL(3)
XENIX System V (21 èþíÿ 1987)

ÈÌß
proctl - yïpaâëÿeò aêòèâíûìè ïpoöeccaìè èëè ãpyïïaìè ïpoöeccoâ

ÑÈÍÒÀÊÑÈÑ

	#include <sys/proctl.h>
	
	proctl (pid, command, arg)
	int pid, command;
	char *arg;

ÎÏÈÑÀÍÈÅ
Proctl âûïoëíÿeò äeécòâèÿ c aêòèâíûìè ïpoöeccaìè èëè ãpyïïaìè ïpoöeccoâ. Oía èìeeò òoò æe ôopìaò, ÷òo è ôyíêöèÿ ioctl(S), ío â êa÷ecòâe ïepâoão apãyìeíòa âìecòo íoìepa oòêpûòoão ôaéëa ècïoëüçyeò ID ïpoöecca pid.

Command ïocpeäcòâoì cèìâoëè÷ecêoão aíaëoãa öeëoão ÷ècëa çaäaeò âûïoëíÿeìoe äeécòâèe. Arg ÿâëÿeòcÿ yêaçaòeëeì ía còpyêòypy äaííûx, oïpeäeëÿþùyþ ïapaìeòpû, câÿçaííûe c command.

Ecëè pid áëoüøe 0, command âoçäeécòâyeò ía ïpoöecc, ÷eé ID paâeí pid. Pid ìoæeò áûòü paâeí 1.

Ecëè pid paâeí 0, command âoçäeécòâyeò ía âce ïpoöeccû (êpoìe ïpoöeccoâ c ID 0 è 1), âxoäÿùèe â òy æe ãpyïïy ïpoöeccoâ, ÷òo è òeêyùèé ïpoöecc.

Ecëè pid paâeí -1 è ýôôeêòèâíûé ïoëüçoâaòeëücêèé ID òeêyùeão ïpoöecca íe ïpèâèëeãèpoâaííûé, command âoçäeécòâyeò ía âce ïpoöeccû (êpoìe ïpoöeccoâ c ID 0 è 1), ÷eé peaëüíûé ïoëüçoâaòeëücêèé ID paâeí ýôôeêòèâíoìy ïoëüçoâaòeëücêoìy ID òeêyùeão ïpoöecca.

Ecëè pid paâeí -1 è ýôôeêòèâíûé ïoëüçoâaòeëücêèé ID òeêyùeão ïpoöecca ïpèâèëeãèpoâaííûé, command âoçäeécòâyeò ía âce ïpoöeccû (êpoìe ïpoöeccoâ c ID 0 è 1).

Ecëè pid oòpèöaòeëeí, ío íe paâeí -1, command âoçäeécòâyeò ía âce ïpoöeccû, âxoäÿùèe â ãpyïïy c ID, paâíûì aácoëþòíoìy çía÷eíèþ pid.

Proctl aâapèéío çaâepøaeòcÿ, ecëè âûïoëíÿeòcÿ xoòÿ áû oäío èç cëeäyþùèx ycëoâèé:
[EINVAL] Command èëè arg íeêoppeêòíû.
[EPERM] Ýôôeêòèâíûé ïoëüçoâaòeëücêèé ID òeêyùeão ïpoöecca íe ïpèâèëeãèpoâaííûé è íè oí, íè peaëüíûé ïoëüçoâaòeëücêèé ID íe coâïaäaþò c ýôôeêòèâíûì èëè peaëüíûì ïoëüçoâaòeëücêèì ID ïpoöecca, êoòopoìy aäpecoâaía command.
[ENOMEM] Heäocòaòo÷ío ïaìÿòè.
[EFAULT] Aäpec, çaäaííûé arg, âûxoäèò ça ïpeäeëû aäpecíoão ïpocòpaícòâa ïpoöecca.

Oãpaíè÷eíèÿ ïo ïaìÿòè
Bûçoâ exec(3) aâapèéío çaâepøaeòcÿ, ecëè â oáëacòè câoïèíãa íe oêaçûâaeòcÿ äocòaòo÷íoão ìecòa. Ýòo oãpaíè÷eíèe ìoæeò áûòü cíÿòo ècïoëüçoâaíèeì cëeäyþùèx çía÷eíèé apãyìeíòa command ôyíêöèè proctl:
PRHUGEX Ïoìe÷aeò ïpoöecc êaê HUGE, ÷òo ïoçâoëÿeò eìy âûïoëíÿòü ïpoãpaììû äaæe, ecëè oíè ïpeâûøaþò äocòyïíûé oáúeì oáëacòè câoïèíãa. Ýôôeêòèâíûé ïoëüçoâaòeëücêèé ID ïoìe÷aþùeão ïpoöecca äoëæeí áûòü ïpèâèëeãèpoâaííûì, HUGE ïpoöeccû áëoêèpyþòcÿ â oïepaòèâíoé ïaìÿòè, ÷òoáû èçáeæaòü câoïèíãa. Ïpoöecc, ïoìe÷eííûé êaê HUGE, ío íe ïpeâûøaþùèé äocòyïíoão oáúeìa oáëacòè câoïèíãa, âeäeò ceáÿ oáû÷íûì oápaçoì, ío íe ìoæeò áûòü ïpeoápaçoâaí â áëoêèpoâaííûé ïpoöecc.
PRNORMX Ïoìe÷aeò ïpoöecc êaê íecïocoáíûé âûçûâaòü c ïoìoùüþ exec(3) HUGE ïpoãpaììû. Taêyþ ïoìeòêy ìoæeò cäeëaòü ëþáoé ïoëüçoâaòeëü. Ecëè äeëaeòcÿ ïoïûòêa ïoìeòèòü òaêèì oápaçoì ïpoöecc, êoòopûé yæe íe ïoìeùaeòcÿ â oáëacòü câoïèíãa, proctl çaâepøaeòcÿ c oøèáêoé EINVAL.

Cëeäyþùèé ôpaãìeíò êoäa ïoçâoëÿeò ïpoöeccy âûïoëíÿòücÿ äaæe, ecëè äëÿ íeão íeò ìecòa â oáëacòè câoïèíãa:

	if(argc<2) {
	     fputs("usage: runbig command arg ...\n",stderr);
	     exit(2);
	}
	argv[argc]=0;
	if(proctl(getpid(),PRHUGEX,(char *)0)<0) {
	     perror("runbig");
	     exit(1);
	}

BOÇÂPAÙAEÌOE ÇÍA×EÍÈE
B cëy÷ae oøèáêè âoçâpaùaeòcÿ çía÷eíèe -1 è â errno çaíocèòcÿ êoä oøèáêè.

ÑÌ. ÒÀÊÆÅ
exec(3), ioctl(3), kill(3)

ÇAÌE×AÍÈß
Ïpoãpaììû, ècïoëüçyþùèe ýòè ôyíêöèè, äoëæíû êoìïoíoâaòücÿ c ôëaãoì -lx.