Разбор и примеры использования функций которые разрешено использовать по сабжекту.

Навигатор по функциям:

#fork

fork - создает дочерний процес, а при ошибке возвращает -1.

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h> // для unix функций

int main(int argc, char* argv[])
{
	int id = fork();
	printf("Hi school 21 id: %d\\n", id);
	return 0;
}

При использовании функции fork() , код как бы делится на две части, на родительский и дочерний процесс. В родительском процессе fork вернет id дочернего, а в дочернем всегда будет возвращаться 0. Но фактический id у дочернего процесса будет тот который fork вернет у родительского, а id родительского можно посмотреть например в системном мониторинге

Untitled

Но сейчас это не важно. Да и поймать в мониторинге программку a.out за время её выполнения в пол секунды нереально.

Пример использования условий в процессах

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h> // для unix функций

int main(int argc, char* argv[])
{
	int id = fork();
	if (id == 0)
		printf("child process\\n");
	else
		printf("main process\\n");
	return 0;
}

Каждый процесс можно делить снова и снова

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h> // для unix функций

int main(int argc, char* argv[])
{
	fork();
	fork();
	printf("Hi school 21\\n");
	return 0;
}

2 форка - дадут 4 процесса. 4 форка - дадут 16 процессов Это 2 в степени n (2^n) 9 форков это 512 процессов

Untitled

Можно быстро посчитать на калькуляторе в режиме cmd+2 через функцию x^y

Что бы создать три процесса, можно использовать условие разрешающее делать форк только процессу не с нулевым id

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h> // для unix функций

int main(int argc, char* argv[])
{
	int	id = fork();
	if (id != 0)
	{
		fork();
		printf("main process id = %d\\n", id);
	}
	else
		printf("child process id = %d\\n", id);
	return 0;
}