В Unix используется в основном 4 функции:
fork () – функция создания нового процесса, с новым идентификатором и копирования в него контекста вызывающего процесса. Функция выполняется следующим образом:
В системной таблице процессов создается новый элемент для создаваемого процесса.
Новому процессу выделяется память.
В выделенную память нового процесса копируется контекст вызывающего процесса.
Увеличивается счетчик во всех таблица работы с файлами для файлов вызывающего процесса (на единицу).
Возвращается код завершения
Два идентичных процесса, счетчики команд указывают на следующие команды:
Fork родителя возвращает идентификатор дочернего процесса, а fork дочернего процесса возвращает 0.
exec () – используется для запуска в рамках текущего процесса новой программы, загруженной из файла, указанного в качестве параметра при вызове этой функции.
|
|
exit (status) – функция используется для завершения процесса. В качестве параметра можно задать код завершения (статус). Exit записывает этот код в элемент системной таблицы процессов, описывающих текущий процесс и посылает родительскому процессу специальный сигнал SIGCLD, извещающий о завершении дочернего процесса.
wait () – используется для ожидания родительским процессом завершения дочернего процесса. Ставит родительский процесс в состояние ожидания до прихода сигнала SIGCLD, а после прихода, считывает код завершения дочернего процесса из элемента системной таблицы процессов.
Возможны разные ситуации использования exit и wait в родительском процессе:
Пример работы в оперативном режиме:
while(1)
{
cmd=prompt()
cmd=verify(cmd)
Rr=fork()
if(rv==0)
{
exec(cmd)
exit(1)
}
else
s=wait()
}