Kończenie procesu

Transkrypt

Kończenie procesu
Kończenie procesu
✦ Proces kończy się (ang. terminate) wówczas,
gdy wykona swoją ostatnią instrukcję i za
pomocą funkcji systemowej exit poprosi system
operacyjny aby go usunął a także aby
✦ przekazał dane wyjściowe z potomka do procesu
macierzystego (za pośrednictwem funkcji systemowej wait
wydanej w procesie macierzystym)
✦ wszystkie zaalokowane zasoby (pamięć fizyczna i
wirtualna, otwarte pliki, bufory we/wy) odebrał
potomkowi
Kończenie procesu (c.d.)
✦ Proces macierzysty może zakończyć potomka ( np.
funkcją systemową abort ) bowiem
✦ potomek nadużył zasobów
✦ wykonywanie potomka stało się jałowe
✦ proces macierzysty kończy się
✦ system operacyjny nie pozwala potomkowi na działanie jeśli
proces macierzysty kończy działanie
✦ system operacyjny wymusza zakończenie wszystkich potomków kończenie kaskadowe (ang. cascading termination)
✦ Wysyłanie (asynchroniczne) sygnału do procesu
✦ kill [-sygnał] pid
✦ Ctrl+Z – zawieszenie procesu : sygnał TSTP
✦ Ctrl+C – zakończenie procesu: sygnał INT
✦ Ctrl+\ – usunięcie procesu: sygnał QUIT
Sygnały - Linux
SIGHUP – odłączenie terminala
SIGINT – przerwanie
SIGQUIT – odłączenie klawiatury
SIGILL – bląd rozkazu
SIGTRAP – pułapka śledzenia
SIGABRT – abort (SIGIOT)
SIGBUS – błąd szyny
SIGFPE – błąd zmiennoprzecinkowy
SIGKILL – zakończenie procesu (nieblokowane) SIGUSR1 – sygnał użytkownika
SIGSEGV – naruszenie segmentacji
SIGUSR2 – sygnał użytkownika
SIGPIPE – awaria potoku
SIGALRM – sygnał zegara (budzik)
SIGTERM – programowe zakończenie procesu SIGSTKFLT – błąd stosu
SIGCHILD – zmiana stanu procesu potomnego SIGCONT – wznowienie wstrzymanego procesu
SIGSTOP – STOP (nieblokowane)
SIGTSTP – wprowadzenie STOP z klawiatury
SIGTTIN – czytanie w tle na tty
SIGTTOU – pisanie w tle na tty
SIGURG – sygnał z gniazda
SIGXCPU – przekroczenie czasu procesora
SIGXFSZ – przekroczenie rozmiaru pliku
SIGVTALARM – budzik zegara wirtualnego
SIGPROF – profilowanie budzika zegara
SIGWINCH – zmiana rozmiaru okna
SIGIO – sygnał gotowości we/wy (SIGPOLL)
SIGPWR – niedobór mocy
SIGSYS – błąd wywołania systemowego
SIGRTMAX – pierwszy sygnał czasu rzeczywistego
SIGRTMIN – ostatni sygnał czasu rzeczywistego
POSIX, ANSI, BSD, SYSV
Kill
#include
#include
#include
#include
#include
#include
<sys/types.h>
<wait.h>
<unistd.h>
<signal.h>
<stdio.h>
<stdlib.h>
int main(void) {
pid_t child;
int errret;
if((child = fork()) < 0) {
perror("fork");
exit(EXIT_FAILURE);
} else if(child == 0) { /* in the child process */
sleep(30);
} else {
/* in the parent */
errret = kill(child, SIGCHLD);
if(errret < 0)
perror("kill:SIGCHLD");
else
sleep(20);
if((kill(child, SIGTERM)) < 0)
perror("kill:SIGTERM");
waitpid(child, NULL, 0 );
}
exit(EXIT_SUCCESS);
}

Podobne dokumenty