Содержание
- 2. Взаимодействие процессов взаимодействие в рамках локальной ЭВМ (одной ОС) взаимодействие в рамках сети родственные процессы произвольные
- 3. Сигналы Примеры сигналов SIGINT (2) SIGQUIT (3) SIGKILL (9) SIGALRM (14) SIGCHLD (18) Сигнал – средство
- 4. #include #include int kill (pit_t pid, int sig); Работа с сигналами pid – идентификатор процесса, которому
- 5. Работа с сигналами #include void (*signal ( int sig, void (*disp) (int))) (int) sig – номер
- 6. #include #include #include int count=0; Пример. Обработка сигнала. void SigHndlr (int s) {printf("\n I got SIGINT
- 7. Пример. Программа “будильник”. int main(int argc, char **argv) { char s[80]; signal(SIGALRM, alrm); alarm(5); printf(“Введите имя
- 8. Пример. Двухпроцессный вариант программы “будильник”. #include #include #include #include void alr(int s) { printf(“\n Быстрее!!! \n”);
- 9. Пример. Двухпроцессный вариант программы “будильник”. /*”отец”*/ for (;;) { sleep(5); kill(pid, SIGALRM); } /*”сын”*/ printf(“Введите имя
- 10. Неименованные каналы.
- 11. #include int pipe (int *pipes); Неименованные каналы. Системный вызов pipe( ) pipes[1] – запись в канал
- 12. Пример. Использование канала. int main(int argc, char **argv) { char *s=”chanel”; char buf[80]; int pipes[2]; pipe(pipes);
- 13. Пример. Типовая схема взаимодействия процессов с использованием канала. int main(int argc, char **argv) { int fd[2];
- 14. Пример. Реализация конвейера. #include int main(int argc, char **argv) { int fd[2]; pipe(fd); if(fork() == 0)
- 15. #include #include #include #include #include #include #define MAX_CNT 100 int target_pid, cnt; int fd[2]; int status;
- 16. Пример. Совместное использование сигналов и каналов – «пинг-понг». void SigHndlr (int s) { if (cnt {
- 17. Пример. Совместное использование сигналов и каналов – «пинг-понг». … else if (target_pid == getppid()) /* процесс
- 18. Пример. Совместное использование сигналов и каналов – «пинг-понг». int main(int argc, char **argv) { pipe(fd); signal(SIGUSR1,
- 19. Пример. Совместное использование сигналов и каналов – «пинг-понг». … } else { /* процесс – сын
- 20. Именованные каналы.
- 21. int mkfifo (char *pathname, mode_t mode); Именованные каналы. Создание. pathname – имя создаваемого канала mode –
- 22. Пример. «Клиент-сервер». Процесс-сервер: #include #include #include #include
- 23. Пример. «Клиент-сервер». Процесс-сервер: int main(int argc, char **argv) { int fd; int pid; mkfifo("fifo", FILE_MODE |
- 24. Пример. «Клиент-сервер». Процесс-клиент: int main(int argc, char **argv) { int fd; int pid = getpid( );
- 25. Взаимодействие «главный-подчинённый».
- 26. Главный - Подчиненный #include int ptrace(int cmd, int pid, int addr, int data); cmd – код
- 27. Главный - Подчиненный int ptrace(int cmd, int pid, int addr, int data); cmd – код команды:
- 28. Системный вызов ptrace() #include int ptrace(int cmd, int pid, int addr, int data); cmd=PTRACE_TRACEME вызывает сыновний
- 29. Системный вызов ptrace() #include int ptrace(int cmd, int pid, int addr, int data); cmd=PTRACE_GETREGS,PTRACE_GETFREGS чтение регистров
- 30. Общая схема трассировки процессов
- 31. Схема установки контрольной точки по адресу ABrPnt Установка контрольной точки Статус отлаживаемого процесса (ОП) ВЫПОЛНЕНИЕ послать
- 32. Пример. int main(int argc, char **argv) { return argc/0; } #include #include #include #include #include #include
- 33. Пример. int main(int argc, char *argv[]) { pid_t pid; int status; struct user_regs_struct REG; if ((pid
- 35. Скачать презентацию