Εργαστήριο 7 fork(), exec(), signals

Σχετικά έγγραφα
Εργαστήριο 5 fork(), exec(), signals

Δημιουργία & Τερματισμός Διεργασιών. Προγραμματισμός II 1

Δημιουργία & Τερματισμός Διεργασιών. Προγραμματισμός II 1

Εργαστήριο ΔΙΕΡΓΑΣΙΕΣ - ΔΙΑΧΕΙΡΙΣΗ

Πανεπιστήμιο Θεσσαλίας Τμήμα Πληροφορικής

Προγραμματισμός συστημάτων UNIX/POSIX. Διεργασίες (processes)

Διαχείριση Διεργασιών και Διαδιεργασιακή Επικοινωνία

Διαχείριση Διεργασιών και Διαδιεργασιακή Επικοινωνία

Δίκτυα Επικοινωνιών ΙΙ: Network Programming UDP Sockets, Signals

UNIX System Programming

Λειτουργικά Συστήματα

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ II. Υφαντόπουλος Νικόλαος Υποψήφιος Διδάκτορας Contact:

Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκή περίοδος

Ντίρλης Νικόλαος- ΕΤΥ 2 ο Φροντιστήριο Παρασκευή, 18/10/2013 Β4. Λειτουργικά Συστήματα- Φροντιστήριο 2

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ. Διεργασίες και Νήματα Εργαστηριακές Ασκήσεις

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ II. Υφαντόπουλος Νικόλαος Υποψήφιος Διδάκτορας Contact:

Διάλεξη 14: Διεργασίες: Έλεγχος & Σήματα (Processes: Control & Signals)

Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκό Έτος

Παράλληλη Επεξεργασία

Λειτουργικά Συστήματα (ΗΥ-345) Χειμερινό Εξάμηνο

Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος

Εκφωνήσεις ασκήσεων εργαστηρίου 1

Θέτοντας και επιστρέφοντας την τιµή της προτεραιότητας διεργασίας

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΔΙΕΡΓΑΣΙΕΣ

Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος

Προγραμματισμός Διαχείρισης Συστημάτων ΙΙ

Λειτουργικά Συστήματα

Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκό Έτος Κανονική Εξέταση Λύσεις

Προγραμματισμός συστημάτων UNIX/POSIX. Σήματα (signals)

ιεργασίες και νήµατα Προγραµµατισµός ΙΙΙ 1 lalis@inf.uth.gr

Λειτουργικά Συστήματα (Λ/Σ)

4 η ιάλεξη: Signals UDP Sockets

Εργαστήριο 5 Αναδρομική διεργασία εισαγωγής καινούριου κόμβου σε ΔΔΑ με αλφαβητική σειρά

$./jms console -w <jms in> -r <jms out> -o <operations file> namedpipe. (standard input).

1. Εισαγωγή. Λειτουργικά Συστήματα Η/Υ. Διεργασίες. Ορισμός ΚΕΦΑΛΑΙΟ 3 - ΔΙΕΡΓΑΣΙΕΣ. Κεφάλαιο 3 «Διεργασίες»

Προγραμματισμός συστημάτων UNIX/POSIX

Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκό Έτος

Εισαγωγή εκτελέσιμου κώδικα σε διεργασίες

Εργαστήριο Λειτουργικών Συστημάτων 8ο εξάμηνο, Ακαδημαϊκή περίοδος

Προγραμματισμός συστημάτων UNIX/POSIX. Διαδιεργασιακή επικοινωνία: αγωγοί (IPC inter-process communication: pipes)

Λειτουργικά Συστήματα

Topic 4: Processes. *Ευχαριστίες στους Τάκη Σταµατόπουλο, Αλέξη ελή, και Αντώνη ελιγιαννάκη

Ελεγκτές/Παρακολουθητές (Monitors) Ταυτόχρονος Προγραμματισμός 1

Λειτουργικά Συστήματα

ΙΩΑΝΝΗΣ ΚΩΝΣΤΑΝΤΙΝΟΥ 2ο ΦΡΟΝΤΙΣΤΗΡΙΟ ΠΑΡΑΣΚΕΥΗ 26 ΟΚΤΩΒΡΙΟΥ 2012 ΑΙΘΟΥΣΑ Β4

Συγχρονισμός & σηματοφόροι. Προγραμματισμός II 1

Χρονοδρομολογητής Κυκλικής Επαναφοράς

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ EPL035: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ

Εργαστήριο 8: Αναδρομική διεργασία εισαγωγής καινούριου κόμβου σε ΔΔΑ

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

waitpid(), read(), write(), pipe(), mkfifo() κ.α.).

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]

ΑΡ Χ Ε Ι Α Κ Ε Ι Μ Ε Ν Ο Υ (text files)

Διδάσκων: Κωνσταντίνος Κώστα

Συστήματα Παράλληλης και Κατανεμημένης Επεξεργασίας

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ. Διεργασίες και Νήματα

Διεργασίες και Νήματα (1/2)

Επανάληψη για τις Τελικές εξετάσεις. (Διάλεξη 24) ΕΠΛ 032: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ

Κατανεμημένα και Παράλληλα Συστήματα (εργαστήριο) Παραδείγματα με openmp

Περιγραφή και Έλεγχος ιεργασιών

Λειτουργικά Συστήματα

Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκή περίοδος

NIKOΛΑΟΣ ΝΤΙΡΛΗΣ 5ο ΦΡΟΝΤΙΣΤΗΡΙΟ ΑΙΘΟΥΣΑ Β4

Τµήµα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών Σεπτέµβριος 2013

Νήµατα. Πολύ σηµαντικό

Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκή περίοδος

Δείκτες σε συναρτήσεις. Προγραμματισμός II 1

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Συστήματα Παράλληλης και Κατανεμημένης Επεξεργασίας

Λειτουργικά Συστήματα Η/Υ

Εργαστήριο Λειτουργικών Συστημάτων. Inside System Calls

Δομημένος Προγραμματισμός (ΤΛ1006)

Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκή περίοδος

ΠΕΡΙΕΧΟΜΕΝΑ ΜΕΡΟΣ I. 1. Εισαγωγή 3 ΠΡΟΛΟΓΟΣ

Δείκτες (Pointers) Ένας δείκτης είναι μια μεταβλητή με τιμή μια διεύθυνση μνήμης. 9.8

ΕΠΛ131 Αρχές Προγραμματισμού

Σηματοφόροι (Σηματοφορείς) Ταυτόχρονος Προγραμματισμός 1

ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ

Κεφάλαιο , 3.2: Συναρτήσεις II. (Διάλεξη 12)

Προγραμματισμός Η/Υ (ΤΛ2007 )

Μεθόδων Επίλυσης Προβλημάτων

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΕΠΛ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ

Dr. Garmpis Aristogiannis - EPDO TEI Messolonghi

Λειτουργικά Συστήματα. Shell Programming

Προγραμματισμός Ι (ΗΥ120)

Ανάλυση αλγορίθμων. Χρόνος εκτέλεσης: Αναμενόμενη περίπτωση. - απαιτεί γνώση της κατανομής εισόδου

Μερικές άλλες χρήσιμες εντολές

Κεφάλαιο , 3.2: Συναρτήσεις II. ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Εισαγωγή Βασικές εντολές Εκτέλεση βήµα-βήµα Εξέταση/Ανάθεση GDB-101. Νίκος Ντάρµος Τµήµα Πληροφορικής Πανεπιστήµιο Ιωαννίνων

Λειτουργικά Συστήματα

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ

Εικονική Μνήμη (Virtual Memory) Προγραμματισμός II 1

Διάλεξη 5η: Εντολές Επανάληψης

Λειτουργικά Συστήματα (ΗΥ321)

Παράλληλη Επεξεργασία Κεφάλαιο 2 Παραλληλισμός Δεδομένων

Προγραµµατισµός 2 The shell

Διεργασίες (Processes)

Λειτουργικά Συστήματα. Ενότητα # 10: Προγραμματισμός UNIX Διδάσκων: Γεώργιος Ξυλωμένος Τμήμα: Πληροφορικής

Διδάσκων: Παναγιώτης Ανδρέου

Transcript:

Εργαστήριο 7 fork(), exec(), signals Στο εργαστήριο θα μελετηθούν: Παραδείγματα χρήσης των συναρτήσεων fork και exec Συνάρτηση waitpid Συνάρτηση WIFEXITED Συνάρτηση WEXITSTATUS Παράδειγμα χρήσης σημάτων Διδάσκων: Γιώργος Χατζηπολλάς Week 7-1

Η συνάρτηση waitpid() int wait (int *status) Προκαλεί την αναμονή μιας διεργασίας μέχρι κάποιο παιδί της τερματίσει -1 αν η διεργασία δεν έχει παιδιά int waitpid (pid_t pid, int*status, intoptions ) Προκαλεί την αναμονή μιας διεργασίας μέχρι το παιδί της που καθορίζεται από το pid να τερματίσει pid = -1 (ή WAIT_ANY) σημάνει ότι περιμένουμε πληροφορία για οποιοδήποτε παιδί ίνεται η δυνατότητα καθορισμού επιπλέον επιλογών. Η πιο συνηθισμένη επιλογή είναι η WNOHANG, η οποία εμποδίζει την waitpid να γίνει blocked αν δεν υπάρχουν τερματιζόμενα παιδιά To status μπορεί να τείχει επεξεργασίας με τα ακόλουθα macros WIFEXITED(status) : Εάν δεν επιστρέψει 0 τότε το παιδί έχει τερματιστεί φυσιολογικά WEXITSTATUS(status) Υπολογίζει τα τελευταία 8 bits του αποτελέσματος που επέστρεψε το παιδί που έχει τερματίσει (μπορεί να έχει τεθεί ως παράμετρος ενός καλέσματος σε exit() ή return). Αυτό μπορεί να υπολογιστεί μόνο στην περίπτωση που η WIFEXITED επιστρέψει μη-μηδέν Week 7-2

Παράδειγμα 1: Χρήση fork() void fork1() { pid_t pid[n]; int i, child_status; for (i = 0; i < N; i++) if ((pid[i] = fork()) == 0) { sleep(20-2*i); exit(100+i); for (i = 0; i < N; i++) { pid_t wpid = wait(&child_status); if (WIFEXITED(child_status)) printf("child %d terminated with exit status %d\n", wpid, WEXITSTATUS(child_status)); else printf("child %d terminate abnormally\n", wpid); Συγχρονισμός με πολλά παιδιά Επεξεργασία των παιδιών σε τυχαία σειρά Χρήση της WIFEXITED και της WEXITSTATUS για να πάρουμε τις πληροφορίες από τα παιδιά Week 7-3

Παράδειγμα 2: Χρήση fork() void fork2() { pid_t pid[n]; int i; int child_status; for (i = 0; i < N; i++) if ((pid[i] = fork()) == 0) { sleep(20-2*i); exit(100+i); /* Child */ for (i = 0; i < N; i++) { pid_t wpid = waitpid(pid[i], &child_status, 0); if (WIFEXITED(child_status)) printf("child %d terminated with exit status %d\n", wpid, WEXITSTATUS(child_status)); else printf("child %d terminate abnormally\n", wpid); Week 7-4

Παράδειγμα 3: Χρήση fork() void fork3() { pid_t pid[n]; int i; int child_status; for (i = 0; i < 3; i++) if ((pid[i] = fork()) == 0) { while(1) ; for (i = 3; i < N; i++) if ((pid[i] = fork()) == 0) { sleep(10); for (i = 0; i < 3; i++) { printf("killing process %d\n", pid[i]); kill(pid[i], SIGINT); for (i = 0; i < N; i++) { pid_t wpid = wait(&child_status); if (WIFEXITED(child_status)) printf("child %d terminated with exit status %d\n", wpid, WEXITSTATUS(child_status)); else printf("child %d terminated abnormally\n", wpid); Week 7-5

Παράδειγμα 4: Χρήση fork() [hpollas@cs4090 epl428]$ tree 3 I am process no 1 with PID 11539 and PPID 9005 I am process no 2 with PID 11540 and PPID 11539 I am process no 4 with PID 11541 and PPID 11540 I am process no 5 with PID 11544 and PPID 11540 I am process no 3 with PID 11547 and PPID 11539 I am process no 6 with PID 11548 and PPID 11547 I am process no 7 with PID 11551 and PPID 11547 [hpollas@cs4090 epl428]$ [hpollas@cs4090 epl428]$ tree 4 I am process no 1 with PID 11486 and PPID 9005 I am process no 2 with PID 11487 and PPID 11486 I am process no 4 with PID 11488 and PPID 11487 I am process no 8 with PID 11489 and PPID 11488 I am process no 3 with PID 11491 and PPID 11486 I am process no 6 with PID 11493 and PPID 11491 I am process no 12 with PID 11494 and PPID 11493 I am process no 9 with PID 11495 and PPID 11488 I am process no 13 with PID 11501 and PPID 11493 I am process no 5 with PID 11500 and PPID 11487 I am process no 10 with PID 11502 and PPID 11500 I am process no 7 with PID 11504 and PPID 11491 I am process no 14 with PID 11506 and PPID 11504 I am process no 11 with PID 11509 and PPID 11500 I am process no 15 with PID 11511 and PPID 11504 [hpollas@cs4090 epl428]$ Πρόγραμμα το οποίο δημιουργεί ένα δυαδικό δέντρο από διεργασίες το οποίο έχει δεδομένο βάθος Ν. Κάθε διεργασία του δέντρου εκτυπώνει την ταυτότητά της, του πατέρα της καθώς και ένα αύξοντα αριθμό σύμφωνα με μία κατά πλάτος διάσχιση του δέντρου Week 7-6

Παράδειγμα 5: Χρήση σημάτων [hpollas@cs4090 epl428]$ timeout -20 ps PID TTY TIME CMD 8986 pts/1 00:00:00 bash 9005 pts/1 00:00:00 bash 11583 pts/1 00:00:00 timeout 11584 pts/1 00:00:00 ps Command execution finished with exit code 0 [hpollas@cs4090 epl428]$ date; timeout -12 sleep 15; date Thu Mar 8 15:02:33 EET 2007 Command was killed by signal 9 Thu Mar 8 15:02:45 EET 2007 [hpollas@cs4090 epl428]$ date; timeout -12 sleep 7; date Thu Mar 8 15:03:24 EET 2007 Command execution finished with exit code 0 Thu Mar 8 15:03:31 EET 2007 [hpollas@cs4090 epl428]$ Πρόγραμμα το οποίο θέτει ένα χρονικό όριο στην εκτέλεση εντολών Week 7-7