с одинаковой работой процессов ребенка
/* Программа 03-1.с – пример создания нового процесса с одинаковой работой процессов ребенка и родителя */ #include <sys/types.h> #include <unistd.h> #include <stdio.h> int main() { pid_t pid, ppid; int a = 0; (void)fork(); /* При успешном создании нового процесса с этого места псевдопараллельно начинают работать два процесса: старый и новый */ /* Перед выполнением следующего выражения значение переменной a в обоих процессах равно 0 */ a = a+1; /* Узнаем идентификаторы текущего и роди- тельского процесса (в каждом из процессов !!!) */ pid = getpid(); ppid = getppid(); /* Печатаем значения PID, PPID и вычислен- ное значение переменной a (в каждом из процессов !!!) */ printf("My pid = %d, my ppid = %d, result = %d\n", (int)pid, (int)ppid, a); return 0; } |
Листинг 3.1. Программа 03-1.с – пример создания нового процесса с одинаковой работой процессов ребенка и родителя. |
Закрыть окно |
/* Программа 03-2.с, изменяющая пользователь- ский контекст процесса (запускающая другую программу) */ #include <sys/types.h> #include <unistd.h> #include <stdio.h> int main(int argc, char *argv[], char *envp[]){ /* Мы будем запускать команду cat c аргументом командной строки 03-2.с без изменения параметров среды, т.е. фактически выполнять команду "cat 03-2.c", которая должна выдать содержимое данного файла на экран. Для функции execle в качестве имени программы мы указываем ее полное имя с путем от корневой директории —/bin/cat. Первое слово в командной строке у нас должно совпадать с именем запускаемой программы. Второе слово в командной строке – это имя файла, содержимое которого мы хотим распечатать. */ (void) execle("/bin/cat", "/bin/cat", "03-2.c", 0, envp); /* Сюда попадаем только при возникновении ошибки */ printf("Error on program start\n"); exit(-1); return 0; /* Никогда не выполняется, нужен для того, чтобы компилятор не выдавал warning */ } |
Листинг 3.2. Программа 03-2.с, изменяющая пользовательский контекст процесса |
Закрыть окно |