">
ÈÌß
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.