Ćwiczenie 1. Napisz program, który wyświetli swój komunikat "hello world" oraz swój pid, oraz pid swojego procesu macierzystego.
Ćwiczenie 2. Wykorzystując funkcję fork napisz program, który utworzy 1 proces potomny. Proces macierzysty ma wyświetlić swój pid, pid własnego procesu macierzystego, oraz pid procesu potomnego (skąd go wziąć?). Proces potomny ma wyświetlić swój pid, pid własnego procesu macierzystego, oraz wartość zwracaną przez funkcję fork.
Ćwiczenie 3. Który z procesów z zadania 2 kończy się wcześniej?
Ćwiczenie 4. Tak zmodyfikuj program z zadania 3, aby proces macierzysty czekał, aż zakończy się proces potomny, i wyświetli informację o tym, że proces został zakończony. Wykorzystaj funkcję wait.
Ćwiczenie 5a. Zmodyfikuj program z zadania 4, aby proces macierzysty utworzył zadaną liczbę procesów (podaną z klawiatury) i zaczekał, aż każdy z procesów wypisze swój pid i zakończy się.
Ćwiczenie 5b. Zmodyfikuj program z zadania 4, aby proces potomny utworzył zadaną liczbę procesów (podaną z klawiatury) i zaczekał, aż każdy z procesów wypisze swój pid i zakończy się.
Ćwiczenie 5c. Napisz program, który utworzy procesy fork jak poniżej:
?,1
└─?,20388
└─sshd,20398
└─shell,20399
├─fork,23138
│ ├─fork,23139
│ ├─fork,23140
│ ├─fork,23141
│ └─fork,23142
└─pstree,23143 -acp
Ćwiczenie 5d. Napisz program, który utworzy procesy fork jak poniżej:
?,1
└─?,20388
└─sshd,20398
└─shell,20399
├─fork,23138
│ ├─fork,23139
│ ├─fork,23140
│ ├─fork,23141
│ └─fork,23142
├─fork,23213
│ └─fork,23214
│ └─fork,23215
│ └─fork,23216
│ └─fork,23217
└─pstree,23222 -acp
Ćwiczenie 6. Napisz program, który wyświetli wszystkie procesy uruchomione przez użytkownika, którego login został podany z linii komedy. Wykorzystaj, któreś z poniższych poleceń:
int execl(const char *path, const char *arg, ...);
int execlp(const char *file, const char *arg, ...);
int execle(const char *path, const char *arg , ..., char * const envp[]);
int execv(const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);
Ćwiczenie 7. Napisz prostego basha.
Pomocne linki do dokumentacji systemowej:
http://linux.die.net/man/2/fork
http://linux.die.net/man/2/wait
http://linux.die.net/man/3/exec
Pomocne linki do języka C i C++:
http://www.cplusplus.com/reference/
Pomocne zbiory nagłówkowe:
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdarg.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <errno.h>
#include <pthread.h>
#include <omp.h>
Pomocne zbiory funkcje wejścia - wyjścia:
int fprintf(FILE *restrict stream, const char *restrict format, ...);
int printf(const char *restrict format, ...);
int sprintf(char *restrict s, const char *restrict format, ...);
int scanf(const char *format, ...);
int fscanf(FILE *stream, const char *format, ...);
int sscanf(const char *str, const char *format, ...);
int fgetc(FILE *stream);
char *fgets(char *s, int size, FILE *stream);
int getc(FILE *stream);
int getchar(void);
char *gets(char *s);
int ungetc(int c, FILE *stream);