Tworzenie procesu
Transkrypt
Tworzenie procesu
Tworzenie procesu
pid = fork ();
#include <stdio.h>
main ()
{
int pid;
/*dołączenie opisu funkcji */
/* wejścia/wyjścia z pliku nagłówkowego */
/* rozpoczęcie działania programu */
if ((pid = fork ()) == 0)
printf (“Proces potomny\n”);
else
printf (“Proces macierzysty\n”);
/* utworzenie procesu */
}
Wynik wykonania programu:
Proces potomny
Proces macierzysty
$
Uwaga:
Należy uwzględnić przypadek przekazywania wartości –1 przez
funkcję fork.
Rodzina funkcji systemowych exec
exec (plik, arg1, ... , argn)
Funkcja
execl
execle
execlp
execv
execve
execvp
Użycie PATH
nie używa
nie używa
używa
nie używa
nie używa
używa
Przekazanie
argumentów
lista argumentów
lista argumentów
lista argumentów
tablica argumentów
tablica argumentów
tablica argumentów
Środowisko
dziedziczone
nie dziedziczone
dziedziczone
dziedziczone
nie dziedziczone
dziedziczone
Rozwidlanie procesów
if ( (pid = fork () ) == 0 )
exec (“xyz”, NULL);
wait
proces
macierzysty
proces
macierzysty
fork
proces
potomny
exec
proces
potomny
exit
proces
zombie
Użycie funkcji exec
#include <stdio.h>
/*dołączenie opisu funkcji */
/* wejścia/wyjścia z pliku nagłówkowego */
main ()
/* rozpoczęcie działania programu */
{
if fork () == 0) {
/* utworzenie procesu */
printf (“Proces potomny\n”);
execl (“/bin/sh”, “sh”, “-c”, “date”, NULL);
}
else
printf (“Proces macierzysty\n”);
}
Wynik wykonania programu:
Proces potomny
Thu Dec 6 19:26:29 CET 2001
Proces macierzysty
$
Funkcje wait i exit
pid = wait (&status);
exit (status);
Sygnały w systemie UNIX
Nazwa
SIGHUP
SIGINT
SIGQUIT
SIGILL
SIGTRAP
SIGIOT
Wartość
01
02
03
04
05
06
SIGEMT
SIGFPE
SIGKILL
SIGBUS
SIGSEGV
SIGSYS
SIGALARM
SIGTERM
SIGURG(*)
SIGSTOP(*)
SIGSTP(*)
SIGCONT(*)
07
08
09
10
11
12
14
15
-
SIGCHLD(*)
-
SIGTTIN(*)
-
SIGXCPU(*)
-
SIGWINCH(*)
SIGUSR1
SIGUSR1
SIGCLD
SIGPWR(**)
16
17
18
19
Opis
linia terminala zawieszona
przerwanie programu
wyjście z programu
nielegalna instrukcja
nakaz śledzenia procesu
wystąpienie pułapki przy
wykonaniu operacji we/wy
wykonana instrukcja emulacji
błąd operacji zmiennoprzecin.
zabicie procesu
błąd magistrali
naruszenie segmentacji
zły argument f. Systemowej
upłynął czas zegara cz. rzecz.
progr. sygnał zakończenia
pilny war. w kanale we/wy
syg. zatrzym. spoza terminalu
sygnał zatrzym. z terminalu
zatrzymany proces jest
kontynuowany
Powiadom. przodka o zawieszeniu/usunięciu potomka
czytanie z terminala przez
proces drugoplanowy
przekroczony limit czasu
jednostki centralnej
zmieniony rozmiar okna term.
syg. def. przez użytkow. 1
syg. def. przez użytkow. 2
usunięcie procesu potomka
błąd zasilania
(*) tylko w systemie 4.3BSD
(**) tylko w systemie UNIX System V
Akcja standardowa
zakończ proces
Zakończ proces
utwórz obraz pamięci
utwórz obraz pamięci
utwórz obraz pamięci
utwórz obraz pamięci
utwórz obraz pamięci
utwórz obraz pamięci
zakończ proces
utwórz obraz pamięci
utwórz obraz pamięci
utwórz obraz pamięci
zakończ proces
zakończ proces
odrzuć sygnał
zawieś proces
zawieś proces
odrzuć sygnał
odrzuć sygnał
zawieś proces
zakończ proces
odrzuć sygnał
zakończ proces
zakończ proces
odrzuć sygnał
zakończ proces
Funkcja signal
Reakcje programu na sygnał:
• podjęcie akcji standardowej
• ignorowanie sygnału
• podjęcie akcji własnej
Standardowa wersja UNIX System V nie stosuje pojęcia
maski sygnałów.
SIGSTOP, SIGKILL nie mogą być ignorowane ani złapane.
signal (sigtype, ptr);
ptr:
SIG_IGN
SIG_DFL
-
brak akcji
akcja standardowa
signal (SIGINT, SIG_IGN);
signal (sigtype, SIG_IGN);
signal (sigtype, SIG_DFL);
signal (sigtype, newptr);
signal (sigtype, oldptr);
Prototyp funkcji signal:
#include <signal.h>
void (*signal (int sig, void (*disp) (int))) (int);