КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Создание процессов и упр-е ими.Процесс в UNIX создается системным вызовом fork(): #include <sys/types.h> #include <unistd.h> Pid_t fork(void) Процесс, сделавший вызов fork называется родительским, а вновь созданный процесс —дочерним. Новый процесс является точной копией породившего его процесса. Как это ни удивительно, но новый процесс имеет те же инструкции и данные, что и его родитель. Более того, выполнение родительского и дочернего процесса начнется с одной и той же инструкции, следующей за вызовом fork, причем знач-е возвращ-мое fork различны, в род процессе fork вернет PID потомка, а в потомок вернет 0.Каждый процесс имеет одного родителя, но может иметь несколько дочерних процессов. Тем не менее между родительским и дочерним процессом имеется ряд различий: 1) Дочернему процессу присваивается уникальный идентификатор PID,отличный от родительского. 2) Соответственно и идентификатор родительского процесса PPID для родителя и потомка различны. 3) Дочерний процесс получает собственные файловые дескрипторы, хотя он разделяет те же записи файловой таблицы. 4) счетчик потребл ресурсов у созданного обнуляется. 5) Для дочернего процесса очищаются все ожидающие доставки сигналы. Пример: дочерний печатает – ребенок Main() {int pid; pid=fork(); If (pid==-1) {perror(“error fork\n”);exit(1);} If (pid==0) {printf(“this Child\n”);} else {printf(“this parent\n”);} Return 0;} Последовательность печати не определена, а зависит от оставшего кванта времени на родительский процесс, если у родителя мал, то он переходит в ожидание, а дочерний порождает и печатает this Child. Создавшая ситуация гонок.
|