Системски позиви

Форк Систем Цалл Линук

Форк Систем Цалл Линук

Форк системски позив

Системски позив виљушке користи се за креирање нових процеса. Новостворени процес је дете процес. Процес који позива форк и креира нови процес је надређени процес. Подређени и родитељски процеси се извршавају истовремено.

Али процеси детета и родитеља налазе се на различитим меморијским просторима. Ови меморијски простори имају исти садржај и било коју операцију коју изводи један процес неће утицати на други процес.

Када се креира дете; сада ће оба процеса имати исти програмски бројач (ПЦ), па ће оба ова процеса указивати на исту следећу инструкцију. Датотеке које отвара надређени процес биће исте за подређени процес.

Подређени процес је потпуно исти као његов родитељ, али постоји разлика у ИД-има процеса:

  1. ИД процеса подређеног процеса је јединствени ИД процеса који се разликује од ИД-а свих осталих постојећих процеса.
  2. ИД процеса надређеног родитеља биће исти као ИД процеса родитеља детета.

Својства процеса детета

Следе нека својства која поседује подређени процес:

  1. Бројачи процесора и искоришћење ресурса се иницијализују да би се ресетовали на нулу.
  2. Када се надређени процес прекине, подређени процеси не примају никакав сигнал јер се ресетује атрибут ПР_СЕТ_ПДЕАТХСИГ у прцтл ().
  3. Нит која се користи за позивање форк () креира подређени процес. Дакле, адреса процеса детета биће иста као адреса родитеља.
  4. Дескриптор датотеке надређеног процеса наслеђује подређени процес. На пример, помак датотеке или статус заставица и И / О атрибути ће се делити између дескриптора датотека подређених и родитељских процеса. Дакле, опис датотеке датотеке родитељске класе односиће се на исти опис датотеке датотеке подређене класе.
  5. Подређени процес наслеђује дескрипторе отворених редова порука надређеног процеса. На пример, ако опис датотеке садржи поруку у надређеном процесу, иста порука ће бити присутна у одговарајућем опису датотеке подређеног процеса. Тако да можемо рећи да су вредности заставица ових дескриптора датотека исте.
  6. Слично ће отворене токове директорија наследити подређени процеси.
  7. Подразумевана вредност заостајања тајмера подређене класе је иста као тренутна вредност заостајања тајмера родитељске класе.

Својства која се не наслеђују поступком Цхилд

Следе нека својства која подређени процес не наслеђује:

  1. Браве за меморију
  2. Сигнал на чекању за подређену класу је празан.
  3. Обрадити закључане записе записа (фцнтл ())
  4. Асинхроне И / О операције и И / О садржаји.
  5. Обавештења о промени директоријума.
  6. Тајмер као што су аларм (), сетитимер () не наслеђује подређена класа.

виљушка () у Ц

У форк () нема аргумената, а повратни тип форк () је цео број. Када се користи форк (), морате да укључите следеће датотеке заглавља:

#инцлуде
#инцлуде
#инцлуде

Када радите са виљушком (), може се користити за тип пид_т за ИД процеса као што је пид_т дефинисан у .

Датотека заглавља је место где је форк () дефинисано па га морате укључити у свој програм да бисте користили форк ().

Тип повратка је дефинисан у и форк () позив је дефинисан у . Због тога морате да укључите оба у свој програм да бисте користили системски позив форк ().

Синтакса форк ()

Синтакса системског позива форк () у Линуку, Убунту је следећа:

пид_т форк (воид);

У синтакси је повратни тип пид_т. Када се подређени процес успешно креира, ПИД подређеног процеса враћа се у надређени процес, а 0 ће се вратити у сам подређени процес.

Ако постоји било каква грешка, онда се -1 враћа у надређени процес и подређени процес се не креира.

Ниједан аргумент се не прослеђује форк (). 

Пример 1: Позивање виљушке ()

Размотрите следећи пример у којем смо користили системски позив форк () за креирање новог подређеног процеса:

ШИФРА:

#инцлуде
#инцлуде
#инцлуде
инт маин ()

виљушка ();
принтф ("Коришћење системског позива форк () \ н");
ретурн 0;

ИЗЛАЗ:

Коришћење системског позива форк ()
Коришћење системског позива форк ()

У овом програму смо користили форк (), ово ће створити нови подређени процес. Када се креира подређени процес, и надређени и подређени процес ће усмерити на следећу инструкцију (исти бројач програма). На овај начин извршиће се преостале инструкције или Ц изрази, укупан број пута процеса, односно 2н пута, где је н број системских позива форк ().

Дакле, када се форк () позив користи једном, као горе (21 = 2) имаћемо излаз два пута.

Овде када се користи системски позив форк (), унутрашња структура ће изгледати овако:

Размотрите следећи случај у којем се виљушка () користи 4 пута:

ШИФРА:

#инцлуде
#инцлуде
#инцлуде
инт маин ()

виљушка ();
виљушка ();
виљушка ();
виљушка ();
принтф ("Коришћење системског позива форк ()");
ретурн 0;

Излаз:

Коришћење системског позива форк () Коришћење системског позива форк () Коришћење системског позива форк () Коришћење системског позива форк () Коришћење системског позива форк () Коришћење системског позива форк () Коришћење системског позива форк () Коришћење системског позива форк () Коришћење системског позива форк () () системски позив Коришћење системског позива форк () Коришћење системског позива форк () Коришћење системског позива форк () Коришћење системског позива форк () Коришћење системског позива форк () Коришћење системског позива форк () Коришћење системског позива форк () 

Сада је укупан број креираних процеса 24 = 16, а изјаву за штампу извршавамо 16 пута.

Пример 2: Тестирање да ли је форк () био успешан

У следећем примеру користили смо конструкцију доношења одлука за тестирање вредности (инт) враћене форк (). И приказују се одговарајуће поруке:

ШИФРА:

#инцлуде
#инцлуде
#инцлуде
инт маин ()

пид_т п;
п = виљушка ();
ако (п == - 1)

принтф ("Дошло је до грешке приликом позивања форк ()");

ако (п == 0)

принтф ("Ми смо у процесу детета");

иначе

принтф ("У родитељском смо процесу");

ретурн 0;

ИЗЛАЗ:

Ми смо у родитељском процесу
Ми смо у процесу детета

У горњем примеру смо користили тип пид_т који ће сачувати повратну вредност форк (). форк () се позива на линији:

п = виљушка ();

Дакле, целобројна вредност коју је форк () сачувао у п, а затим се п упоређује да би се проверило да ли је наш позив форк () успео.

Када се користи форк () и дете се успешно креира, ИД подређеног процеса ће се вратити у надређени процес, а 0 ће се вратити у подређени процес.ИД процеса детета у родитељском процесу неће бити исти као ИД процеса детета у самом процесу детета. У процесу детета ИД процеса детета биће 0.

Помоћу овог водича можете видети како започети системски позив форк у Линуку.

Додајте покрете миша у Виндовс 10 помоћу ових бесплатних алата
Последњих година рачунари и оперативни системи су се увелико развили. Било је време када су корисници морали да користе команде за навигацију кроз мен...
Контролишите и управљајте кретањем миша између више монитора у оперативном систему Виндовс 10
Двоструки приказ миша омогућава вам контролу и конфигурисање кретања миша између више монитора, успоравајући његово кретање близу границе. Виндовс 10/...
ВинМоусе вам омогућава да прилагодите и побољшате кретање показивача миша на Виндовс рачунару
Ако желите да побољшате подразумеване функције показивача миша, користите бесплатни програм ВинМоусе. Додаје још функција које ће вам помоћи да на нај...