Processi: Sistemi Operativi I

Slides:



Advertisements
Presentazioni simili
Memoria Virtuale in Linux
Advertisements

INFORMATICA Altre Istruzioni di I/O
PROCESS MANAGEMENT: STRUTTURE DATI
CONCLUSIONE - Nucleo (o Kernel) Interagisce direttamente con lhardware Interagisce direttamente con lhardware Si occupa dellesecuzione.
Programmazione concorrente
Gestione dei processi A. Ferrari.
Il Sistema Operativo.
1 Processi e Thread Processi Thread Meccanismi di comunicazione fra processi (IPC) Problemi classici di IPC Scheduling Processi e thread in Unix Processi.
Gestione del processore
SC che operano su processi
Gestione dei Processi. I processi Un processo è unistanza di esecuzione di un programma. Consiste di –Un identificatore univoco (PID) –La handle table.
Comandi ai dispositivi di I/O + Si usano due metodi per mandare informazioni a un dispositivo: –Istruzioni specifiche di I/O –I/O mappato in memoria (memory.
I segnali.
1 System Call per Comunicazione tra Processi Pipe.
Memoria virtuale Memoria virtuale – separazione della memoria logica dell’utente dalla memoria fisica. Solo alcune parti di un programma devono trovarsi.
I processi Concetto di processo Scheduling dei processi
Sincronizzazione fra processi
Processi Concetto di processo Scheduling dei processi
2 luglio 2006URM2 – ING- OOP0304 OL G. Cantone e A. Lomartire 1 Programmazione Orientata agli Oggetti Processi, task e thread Java (ed esempi) Università
Argomenti dalla linea dei comandi Gli argomenti possono essere passati a qualsiasi funzione di un programma, compresa la main(), direttamente dalla linea.
Threads: Sistemi Operativi I Corso di Laurea in Ingegneria Informatica
Struttura dei sistemi operativi (panoramica)
I Thread.
I Processi.
Software di base Il sistema operativo è un insieme di programmi che opera sul livello macchina e offre funzionalità di alto livello Es.organizzazione dei.
1 Gestione del processore Il modello a processi sequenziali.
INFORMATICA Altre Istruzioni di I/O. © Piero Demichelis 2 Funzioni di I/O Per la lettura e la scrittura da videoterminale il C prevede numerose istruzioni.
memoria gestita staticamente:
Organizzazione della Memoria (Unix) Text contiene le istruzioni in linguaggio macchina del codice eseguibile, può essere condiviso in caso di processi.
Sistemi Operativi GESTIONE DEI PROCESSI.
Sistemi Operativi GESTIONE DELLA MEMORIA CENTRALE.
Strutture dei sistemi di calcolo Funzionamento di un sistema di calcolo Struttura di I/O Struttura della memoria Gerarchia delle memorie Architetture di.
1 LINUX: struttura generale The layers of a UNIX system. User Interface.
Il sistema operativo Vito Perrone
Concorrenza e Sincronizzazione di Thread e Processi
INTRODUZIONE l sistema operativo è il primo software che lutente utilizza quando accende il computer; 1)Viene caricato nella memoria RAM con loperazione.
Il sistema operativo.
Architettura degli elaboratori
La schedulazione dei processi
Seconda Università degli Studi di Napoli Facoltà di Economia Corso di Informatica Prof.ssa Zahora Pina.
1 Scheduling in Windows 2000 Un thread entra in modalità kernel e chiama lo scheduler quando: Si blocca su un oggetto di sincronizzazione (semaforo, mutex,
Processi e Thread Job: Insieme di processi che condividono quote e limiti. Processo: Contenitore di risorse (una lista di thread, una lista di handle e.
1 Lucidi delle esercitazioni di Sistemi di Elaborazione in Rete Università degli Studi della Calabria Corso di Laurea in Ingegneria Gestionale A.A. 2003/2004.
Processi.
1 I segnali. 2 Prima un po’ di teoria…... 3 Stati dei processi in UNIX Idle Sleeping Zombified Runnable Running Fork iniziata waitpid Fork terminata.
Sistema Operativo (Software di base)
Prima di iniziare… Durata attività: due lezioni frontali + una lezione laboratorio + compiti per casa Prerequisiti: elementi base architettura dei calcolatori.
I processi.
1 Gestione del Processore (Scheduling). 2 Scheduling dei processi È l’attività mediante la quale il sistema operativo effettua delle scelte tra i processi,
Gestione del Processore (Scheduling)
T. MottaGenerazione e terminazione processi1 Creazione e terminazione dei processi Tommaso Motta
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Il nucleo del Sistema Operativo
1 Gestione della Memoria. 2 Idealmente la memoria dovrebbe essere –grande –veloce –non volatile Gerarchia di memorie –Disco: capiente, lento, non volatile.
Fondamenti di Informatica II Ingegneria Informatica (A-I) Prof. M.T. PAZIENZA a.a – 3° ciclo.
Gestione del processore (Scheduler)
1 SC che operano su processi Getpid, fork, exec, wait, waitpid, exit, dup, dup2.
1 Amministrazione dei processi nel sistema operativo Unix (Bach: the Design of the Unix Operating System (cap: 6, 7, 8)
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
1 Input/Output. 2 Livelli del sottosistema di I/O Hardware Gestori delle interruzioni Driver dei dispositivi Software di sistema indipendente dal dispositivo.
1 Input/Output. 2 Livelli del sottosistema di I/O Hardware Gestori delle interruzioni Driver dei dispositivi Software di sistema indipendente dal dispositivo.
Gestione della Memoria
1 Processi e Thread Processi Thread Meccanismi di comunicazione fra processi (IPC) Problemi classici di IPC Scheduling Processi e thread in Unix Processi.
1 Processi e Thread Processi Thread Meccanismi di comunicazione fra processi (IPC) Problemi classici di IPC Scheduling Processi e thread in Unix Processi.
1 System Call che operano su processi Getpid, fork, exec, wait, waitpid, exit, dup, dup2.
Corso di Laurea in Biotecnologie corso di Informatica Paolo Mereghetti DISCo – Dipartimento di Informatica, Sistemistica e Comunicazione.
1 System Call ancora Vediamo passo passo come funziona una SC.
1 System Call che operano su processi Getpid, fork, exec, wait, waitpid, exit, dup, dup2.
Fabio Garufi - TAADF Tecniche Automatiche di Acquisizione Dati Sistemi operativi.
Il Sistema Operativo Processi e Risorse
Transcript della presentazione:

Processi: Sistemi Operativi I Corso di Laurea in Ingegneria Informatica Docente: Francesco Quaglia Processi: Modelli a stati Rappresentazione di processi Liste di processi e scheduling Processi in sistemi operativi attuali (NT/UNIX)

Esecuzione di processi L'esecuzione di ogni processo puo' essere caratterizzata tramite una sequenza di istruzioni denominata traccia g+0 g+1 g+2 g+3 g+4 g+5 g+6 g+7 g+8 a+0 a+1 a+2 a+3 a+4 a+5 a+6 b+0 b+1 b+2 b+3 Memoria principale d Dispatcher Program counter a Processo A b Processo B g Processo C Un sistema operativo Time-Sharing garantisce una esecuzione interleaved delle tracce dei singoli processi

Un esempio di esecuzione interleaved ----timeout d+0 d+1 b+0 b+1 ----I/O request g+0 g+1 g+2 g+3 ----timeout d+0 d+1 a+4 a+5 a+6 ----Processo A terminato b+2 b+3 ----Processo B terminato d+0 d+1 g+4 g+5 g+6 g+7 ---Processo C terminato esecuzione dispatcher =

Rappresentazione di processi Modello a due stati Dispatch Creation Termination Running Not running Pause Diagramma di accodamento Dispatch Termination Creation Processore Coda di processi Pause Incompletezza del modello non necessariamente un processo nello stato not-running e' realmente pronto per proseguire l'esecuzione

Rappresentazione a tre stati Dispatch Creation Termination Running Ready Timeout Event occurrence Event wait Blocked Transizioni Ready  Running: assegnazione del processore al processo Running  Ready: il processo ha utilizzato completamente il massimo intervallo di tempo ammesso dalla disciplina TS per l'esecuzione di una porzione della traccia Running  Blocked: il processo entra in attesa di un evento il cui accadimento e' necessario alla sua prosecuzione Blocked  Ready: l'evento atteso si verifica

Stati addizionali New Exit Creation Admit Ready New stato in cui il sistema alloca ed inizializza strutture dati per la gestione dell'esecuzione del processo Running Termination Exit Exit stato di rilascio di strutture dati allocate all'atto della creazione del processo e di gestione delle azioni necessarie ad una corretta terminazione di processo

Motivazioni per la creazione di un processo Attivazione di un "batch job" Determinata dalla struttura della "batch control sequence" Logon interattivo Accesso al sistema da parte di un nuovo utente Gestione di un servizio Il sistema puo' creare un nuovo processo per soddisfare una richiesta di servizio senza necessita' di sospendere il processo utente richiedente Spawning Creazione di un nuovo processo su esplicita richiesta di un processo utente correntemente attivo

Motivazioni per la terminazione di un processo Completamento della traccia di istruzioni Puo' essere comunicato al sistema in modo esplicito (definizione esplicita di uno stato di teminazione) Indisponibilita' di memoria L'esecuzione del processo richiede una quantita'di memoria indisponibile Violazioni di limite Il processo tenta di accedere a locazioni di memoria per le quali non gli e' permesso l'accesso Errore di protezione Il processo tenta di accedere ad una risorsa inesistente o su cui non ha permessi di accesso. Oppure tenta di utilizzare una risorsa in modo inproprio Possibilmente operata dal sistema od anche di un altro processo Terminazione su richiesta Errore aritmetico Divisione per zero, overflow

Il livello di multiprogrammazione Il processore e' tipicamente molto piu' veloce dei sistemi di I/O esiste la possibilita' che la maggior parte dei processi residenti in memoria siano simultaneamente nello stato Blocked in attesa di completamento di una richiesta di I/O Rischio di sottoutilizzo del processore Prevenire il problema implica la necessita' di poter mantenere attivi un numero di processi molto elevato, ovvero aumentare il livello di multiprogrammazione Per superare il limite imposto dal vincolo della quantita' di memoria fisica disponibile si utilizza la tecnica dello Swapping

Stati di un processo e Swapping Dispatch Termination Admit Running New Ready Exit Timeout Event occurrence Event wait Memory reload (Swap in) Blocked Suspend (process removed from memory - Swap out) Event occurrence Ready Suspended Blocked Suspended

Cause di sospensione Swapping Richiesta Temporizzazione Recupero Gestione della memoria da parte del sistema operativo Swapping Da parte di un utente interattivo Da parte del processo padre (es. Per coordinare attivita’) Richiesta Temporizzazione Gestione di attivita’ periodiche (es. Monitoraggio) Recupero Di situazioni erronee da parte del sistema operativo

Gestione di processi: strutture di controllo Per gestire l'esecuzione di processi il sistema operativo mantiene informazioni sui processi stessi e sulle risorse Tabelle di memoria Immagine Proc. 1 Memoria Processi Files Disposit. Processo 1 Processo n Tabella dei processi Immagine Proc. N

Tabelle di memoria Includono informazioni su - l'allocazione della memoria principale ai processi - l'allocazione della memoria secondaria ai processi - la modalita' di protezione dei singoli segmenti di memoria (per esempio quali processi possono eventualmente accedere ad alcune regioni di memoria condivisibili) - tutto cio' che e' necessario a gestire la memoria virtuale nei sistemi in cui essa e' supportata Main memory Swap area Core map Swap map

Immagine di un processo L'immagine di un processo e' definita - dal programma di cui il processo risulta istanza - dai dati, inclusi nella parte modificabile della memoria del processo - da uno stack di sistema, di supporto alla gestione di chiamate di procedura o funzione - da una collezione di attributi necessari al sistema per controllare l'esecuzione del processo stesso, la quale viene comunemente denominata Process Control Block (PCB) Tale immagine viene tipicamente rappresentata in blocchi di memoria (contigui o non) che possono risiedere o in memoria principale o sull'area di Swap del disco Una piccola porzione e' tipicamente mantenuta in memoria principale per controllare l'evoluzione di un processo anche quando esso risiede sull'area di Swap

Attributti: contenuto del PCB Identificatori Del processo in oggetto e di processi relazionati (padre, eventuali figli) Stato del processo Posizione corrente nel precedente diagramma di rappresentazione Privilegi In termini di possibilita' di accesso a servizi e risorse Contenenti informazioni associate allo stato corrente di avanzamento dell'esecuzione (es. Il valore del program counter, I puntatori allo stack, I registri interni del processore) Registri Informazioni di scheduling Tutto cio' che il sistema necessita di sapere per poter arbitrare l'assegnazione del processore ai processi che si trovano nello stato Ready (problema dello scheduling della CPU) Informazioni di stato Evento atteso

Liste di processi e scheduling PCB Ready->Running Running Problema dello scheduling di basso livello (scheduling della CPU) Ready Blocked Bloc. Susp. Ready. Susp. Ready Susp.->Ready Problema dello scheduling di alto livello (gestione dello swapping)

Cambio di modo di esecuzione Cambio di contesto salvataggio del contesto corrente aggiornamento del PCB del processo corrente (definizione dello stato) inserimento del PCB nella lista/coda adeguata selezione del processo da schedulare aggiornamento del PCB del processo schedulato (cambio di stato) ripristino del contesto del processo schedulato Cambio di modo di esecuzione accesso a privilegi di livello superiore passando al modo kernel possibilita’ di esecuzione di istruzioni non ammesse in modo utente modo kernel caratterizzato (e quindi riconoscibile) da settaggio di bit di stato del processore

Modi di esecuzione e architettura di sistema Kernel esterno alle applicazioni P1 P2 Pn Processi utente kernel Kernel eseguito all’interno dei processi P1 P2 Pn Processi utente Funzioni di sistema Funzioni di supporto al cambio di processo

Cambio di modo Cambio di contesto Modi di esecuzione e contesto di processo Cause di cambio di contesto processo interruzione di clock (time-sharing), viene attivato lo scheduler per cedere il controllo ad un altro processo interruzione di I/O, con possibile riattivazione di un processo a piu’ alta priorita’ fault di memoria (per sistemi a memoria virtuale), con deattivazione del processo corrente Cause di cambio di modo di esecuzione attivazione di un modulo kernel gestione di una routine di interruzione Salvataggio/ripristino di porzione di contesto Nessuna implicazione diretta Cambio di modo Cambio di contesto

UNIX: stati di processi Preempted created User mode running System call/interrupt Ready to run Ready swapped out Kernel mode running Interrupt Sleeping in memory Sleeping swapped out Termination zombie

Immagine di processo in UNIX Testo Dati Stack utente Memoria condivisa Contesto utente Program counter Registro di stato del processore Stack pointer Registri generali Contesto registri Entry nella tabella de processi U area (area utente) Tabella indirizzamento (memoria virtuale) Stack del modo kernel Contesto sistema

Entry della tabella dei processi Stato del processo Puntatori alla U area Dimensioni del processo Identificatori d’utente (reale ed effettivo) Identificatori di processi (pid, id del genitore) Descrittore degli eventi (valido in stato sleeping) Priorita’ Segnali (mandati al processi ma non ancora gestiti) Timer (monitoring) P_link (puntatore per la lista ready) Stato della memoria (swap inout)

U area Puntatore alla entry della tabella dei processi Dimensioni del processo Identificatori d’utente (effettivo) Array per i gestori di segnali Terminale Campo di errore Parametri di I/O (es. indirizzi dei buffer) Timer (monitoring in modalita’ utente) Valore di ritorno di system calls Tabella dei descrittori di file

UNIX: avvio Shell tipiche: kernel (pid=0) init (pid=1) getty login legge /etc/inittab getty login shell Shell tipiche: C Bourne Bash Korn legge /etc/passwd Comandi di shell: nome-comando [arg1, arg2, ...., argn]

Principali comandi di shell

Creazione di un processo int fork() Descrizione invoca la duplicazione del processo chiamante Restituzione 1) nel chiamante: pid del figlio, -1 in caso di errore 2) nel figlio: 0 Processo padre Processo figlio stack stack Entrambi i processi ripartono dall’istruzione successiva alla fork() nel testo fork() heap heap dati dati testo testo

Sincronizzazione padre figlio int wait(int *status) Descrizione invoca l’attesa di terminazione di un proc. figlio Parametri codice di uscita negli 8 bit meno siglificativi puntati da status Restituzione -1 in caso di fallimento #include <stdio.h> void main(int argc, char **argv){ int pid,status; pid = fork(); if ( pid == 0 ){ printf(”processo figlio”); exit(0); } else{ printf(“processo padre, attesa terminazione figlio”); wait(&status);

Definizione di immagini di memoria (famiglia di chiamate execX) int execl(char *file_name, [char *arg0, ... ,char *argN,] 0) Descrizione invoca l'esecuzione di un programma Parametri 1) *file_name: nome del programma 2) [*arg0, ... ,*argN,]: parametri della funzione main() Restituzione -1 in caso di fallimento L’esecuzione avviene per sostituzione del codice (valido per tutte le chiamate della famiglia) Cerca il programma da eseguire solo nel direttorio corrente la funzione execlp() cerca in tutto il path valido per l’applicazione che la invoca Mantenuto nella variabile d’ambiente PATH

Definizione di parametri del main() a tempo di esecuzione int execv(char *file_name, char **argv) Descrizione invoca l'esecuzione di un programma Parametri 1) *file_name: nome del programma 2) **argv: parametri della funzione main() Restituzione -1 in caso di fallimento Cerca il programma da eseguire solo nel direttorio corrente la funzione exevp() cerca in tutto il path valido per l’applicazione che la invoca

Un esempio semplice Nota #include <stdio.h> int main(int argc, char *argv[]) { execlp("ls","ls",0); printf("La chiamata execlp() ha fallito\n") } Nota Il risultato dell’esecuzione dipende dalla composizione della variabile di ambiente PATH Possibilita’ di una sequenza di esecuzione infinita (il programma viene eseguito infinite volte

Una semplice shell di comandi UNIX like Comandi interni hanno il codice cablato nella shell UNIX Comandi esterni sono di fatto applicazioni distinte dalla shell UNIX #include <stdio.h> void main() { char comando[256]; int pid, status; while(1) { printf("Digitare un comando: "); scanf("%s",comando); pid = fork(); if ( pid == -1 ) { printf("Errore nella fork.\n"); exit(1); } if ( pid == 0 ) execlp(comando,comando,0); else wait(&status); } } Esegue comandi senza parametri Comandi interni (ovvero su variabili d’ambiente) non hanno effetto Di fatto esegue, con effetto, solo comandi esterni

Variabili d’ambiente: alcuni dettagli PWD direttorio di lavoro corrente HOME directory principale d’utente PATH specifica di ricerca di eseguibili DISPLAY specifica di host dove reindirizzare l’output grafico LOGNAME login dell’utente Acquisizione valori di variabili d’ambiente char *getenv(char *name) Descrizione richiede il valore di una variabile d’ambiente Parametri *name, nome della variabile d’ambiente Restituzione NULL oppure la stringa che definisce il valore della variabile

Definizione di variabili d’ambiente int *putenv(char *string) Descrizione setta il valore di una variabile d’ambiente Parametri *string, nome della variabile d’ambiente + valore da assegnare (nella forma “nome=valore”) Restituzione -1 in caso di fallimento se la variabile d’ambiente non esiste viene anche creata la congiunzione di valori aviene attraverso il carattere ’:’ ES. PATH=/user/local/bin:/bin/:/home/quaglia/bin

Settaggio/eliminazione di variabili d’ambiente int setenv(char *name, char *value, int overwrite) Descrizione crea una variabile d’ambiente e ne setta il valore Parametri 1) *name: nome della variabile d’ambiente 2) *value: valore da assegnare 3) overwrite: flag di sovrascrittura in caso la variabile esista Restituzione -1 in caso di fallimento void unsetenv(char *name) Descrizione cancella una variabile d’ambiente Parametri *name: nome della variabile d’ambiente

Passaggio di variabili d’ambiente int execve(char *file_name, char **argv, char **envp) Descrizione invoca l'esecuzione di un programma Parametri 1) *file_name: nome del programma 2) **argv: parametri della funzione main() 3) **envp: variabili d’ambiente Restituzione -1 in caso di fallimento Esistono versioni simili anche per execl() Quando si esegue una fork(), le variabili d’ambiente del processo padre vengono ereditate totalmente dal processo figlio

NT/2000: stati di processi (thread) Dovuto al multiprocessing Standby Ready Running Event occurrence Event wait Risorsa disponibile Waiting Terminated Transition Risorsa non disponibile

Oggetti In NT/2000 ogni entita’ e’ un oggetto Gli oggetti si distinguono per tipo attributi dell’oggetto servizi I servizi definiscono cio’ che e’ possibile richiede al sistema operativo da parte i un oggetto di un deteminato tipo

Oggetti di tipo processo: attributi ID del processo Descrittore della sicurezza Priorita’ di base (dei thread del processo) Affinita’ di processore (insieme di processori utili per l’esecuzione) Limiti di quota Tempo di esecuzione (totale di tutti i thread del processo) Contatori di I/O Contatori di memoria virtuale Porte per le eccezioni (canali verso il gestore dei processi) Stato di uscita

Oggetti di tipo processo: servizi Creazione di processi Apertura di processi Richiesta/modifica di informazioni di processi Terminazione di processo Allocazione/rilascio di memoria virtuale Lettura/scrittura di memoria virtuale Protezione di memoria virtuale Blocco/sblocco di memoria virtuale

Handle e tabella degli oggetti Ogni processo accede ad oggetti tramite un handle (maniglia) L’handle implementa un riferimento all’oggetto tramite una tabella degli oggetti propria del processo Tabella degli oggetti Processo Riferimento all’oggetto Handle

Attributi di sicurezza: ereditabilita’ degli handle typedef struct _SECURITY_ATTRIBUTES { DWORD nLength; LPVOID lpSecurityDescriptor; BOOL bInheritHandle; } SECURITY_ATTRIBUTES Descrizione struttura che specifica permessi Campi nLength: va settato SEMPRE alla dimensione della struttura lpSecurityDescriptor: puntatore a una struttura SECURITY\_DESCRIPTOR bInheritHandle: se uguale a TRUE un nuovo processo puo’ ereditare l'handle a cui fa riferimento questa struttura

Creazione di un processo BOOL CreateProcess( LPCTSTR lpApplicationName, LPTSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCTSTR lpCurrentDirectory, LPSTARTUPINFO lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation) Descrizione invoca la creazione di un nuovo processo (creazione di un figlio) Restituzione nel chiamante: un valore diverso da zero in caso di successo, 0 in caso di fallimento.

Parametri lpApplicationName: stringa contenente il nome del file da eseguire lpCommandLine: stringa contenente l'intera riga di comando del programma. lpProcessAttributes: puntatore a una struttura SECURITY_ATTRIBUTES che specifica se l'handle del nuovo processo puo’ essere ereditata da processi figli lpThreadAttributes:puntatore a una struttura SECURITY_ATTRIBUTES che specifica se l'handle del primo thread delnuovo processo puo’ essere ereditata da processi figli. bInheritHandles: se e' TRUE ogni handle ereditabile del processo padre viene automaticamente ereditato dal processo figlio dwCreationFlags: 0pzioni varie (per es. La priorita’). lpEnvironment: Puntatore a una struttura contenente l'ambiente del processo. NULL eredita l'ambiente del processo padre lpCurrentDirectory: stringa contenente la directory corrente del processo lpStartupInfo: Puntatore a una struttura STARTUPINFO lpProcessInformation: puntatore a struttura PROCESS_INFORMATION che riceve informazioni sul processo appena creato.

Strutture dati WINBASE.H WINBASE.H typedef struct _PROCESS_INFORMATION { HANDLE hProcess; HANDLE hThread; DWORD dwProcessId; DWORD dwThreadId; } PROCESS_INFORMATION; WINBASE.H typedef struct _STARTUPINFO { DWORD cb; .......... } STARTUPINFO WINBASE.H

Un esempio #include <windows.h> #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { BOOL newprocess; STARTUPINFO si; PROCESS_INFORMATION pi; memset(&si, 0, sizeof(si)); memset(&pi, 0, sizeof(pi)); si.cb = sizeof(si); newprocess = CreateProcess(".\\figlio.exe", ".\\figlio.exe pippo pluto", NULL, FALSE, NORMAL_PRIORITY_CLASS, &si, &pi); if (newprocess == FALSE) { printf(“Chiamata fallita\n"); }

Terminazione di un processo e relativa attesa VOID ExitProcess(UINT uExitCode) Descrizione Richiede la terminazione del processo chiamante Argomenti uExitCode: valore di uscita del processo e di tutti i thread terminati da questa chiamata DWORD WaitForSingleObject(HANDLE hHandle, DWORD dwMilliseconds) Descrizione effettua la chiamata wait ad un mutex Parametri hHandle: handle al mutex dwMilliseconds: timeout Restituzione WAIT_FAILED in caso di fallimento

Catturare il valore di uscita di un processo int GetExitCodeProcess( HANDLE hProcess, LPDWORD lpExitCode ) Descrizione richiede lo stato di terminazione di un processo Parametri hProcess: handle al processo lpExitCode: puntatore all’area dove viene scritto il codice di uscita