Иногда возникает необходимость обрабатывать несколько клиентов или несколько потоков данных одновременно, для этого удобно воспользоваться форком процесса.
Плюсами данного подхода можно считать то, что при неудачном завершении или ошибке в коде, погибнет только один процесс, а не вся программа.
Итак приступим.
Заголовки:
#include <sys/types.h> #include <unistd.h> #include <iostream> #include <stdio.h> using namespace std;
И сразу приступим к наполнению функции main.
Объявим необходимые перменные:
pid_t pid;
char *message;
int n;
pid — для хранения pid процесса
message — указатель на текст для вывода
n — количество проходов циала.
Выводим сообщение о начале работы:
cout << "starting...\n";
Сразу же создаём форк. При этом функция вернёт pid процесса:
pid = fork();
Дочерний процесс при этом получит pid 0,
Если же в переменную попало -1 — следует обработать ошибку.
Для всех этих дел воспользуемся конструкцией switch :
switch(pid) {
case -1:
perror("fork error");
return 1;
case 0:
message = "this is child";
n = 5;
break;
default:
cout << "parent exit...";
return 0;
break;
}
В то время как главный процесс закончил свою работу, дочерний выполняет инструкции дальше:
for (;n>0;n--) {
puts(message);
sleep(1);
}
Выводим сообщение о работе дочернего процесса 5 раз.
Ну и программа целиком:
#include <sys/types.h>
#include <unistd.h>
#include <iostream>
#include <stdio.h>
using namespace std;
int main() {
pid_t pid;
char *message;
int n;
cout << "starting...\n";
pid = fork();
switch(pid) {
case -1:
perror("fork error");
return 1;
case 0:
message = "this is child";
n = 5;
break;
default:
cout << "parent exit...";
return 0;
break;
}
for (;n>0;n--) {
puts(message);
sleep(1);
}
return 0;
}
Вот и всё ;







