-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlab8-2.txt
124 lines (124 loc) · 7.82 KB
/
lab8-2.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
±stud@vm2:~$ # Στο σημείο αυτό, θα συζητήσουμε για δύο καταστάσεις που
±stud@vm2:~$ # μπορούν να βρεθούν οι διεργασίες: στο προσκήνιο (foreground)
±stud@vm2:~$ # και στο παρασκήνιο (background).
±stud@vm2:~$ #
±stud@vm2:~$ # Ας ξεκινήσουμε με κάποιους σύντομους ορισμούς:
±stud@vm2:~$ #
±stud@vm2:~$ # - Διεργασία (process): Σε ένα λειτουργικό σύστημα UNIX/Linux,
±stud@vm2:~$ # μια διεργασία είναι ένα πρόγραμμα που εκτελείται με τους
±stud@vm2:~$ # σχετικούς πόρους του, όπως κώδικας και δεδομένα.
±stud@vm2:~$ #
±stud@vm2:~$ # - Διεργασία στο προσκήνιο (foreground process): Μια διεργασία
±stud@vm2:~$ # μπορεί να εκτελείται στο προσκήνιο, δηλαδή η εκτέλεσή της
±stud@vm2:~$ # καταλαμβάνει το τρέχον τερματικό και πρέπει να ολοκληρωθεί πριν
±stud@vm2:~$ # από την εκτέλεση άλλων εντολών.
±stud@vm2:~$ #
±stud@vm2:~$ # - Διεργασία στο παρασκήνιο (backround process): Μια διεργασία
±stud@vm2:~$ # μπορεί να εκτελείται στο παρασκήνιο, δηλαδή η εκτέλεσή της
±stud@vm2:~$ # δεν καταλαμβάνει το τρέχον τερματικό και μπορεί να συνεχιστεί
±stud@vm2:~$ # η χρήση του τερματικού για άλλες εντολές.
±stud@vm2:~$ #
±stud@vm2:~$ # - Εργασία (job): Στο πλαίσιο του τερματικού μια εργασία (job)
±stud@vm2:~$ # αποτελείται από μία ή περισσότερες σχετικές διεργασίες που
±stud@vm2:~$ # εκτελούνται μαζί.
±stud@vm2:~$ #
±stud@vm2:~$ # Ας δούμε μερικά παραδείγματα.
±stud@vm2:~$ #
±stud@vm2:~$ # Η εντολή sleep υλοποιεί προσωρινή καθυστέρηση για κάποιο
±stud@vm2:~$ # προκαθορισμένο χρονικό διάστημα. Για παράδειγμα:
±stud@vm2:~$ sleep 2
~
±stud@vm2:~$ #
±stud@vm2:~$ # Η εντολή θα ολοκληρωθεί μετά από 2 δευτερόλεπτα. Η εκτέλεση της
±stud@vm2:~$ # εντολής δημιουργεί μια διεργασία στο προσκήνιο. Δηλαδή, θα
±stud@vm2:~$ # πρέπει να περιμένουμε να ολοκληρωθεί, ώστε να έχουμε τη
±stud@vm2:~$ # δυνατότητα πληκτρολόγησης νέας εντολής στην γραμμή εντολών.
±stud@vm2:~$ #
±stud@vm2:~$ # Εναλλακτικά, μπορούμε να τερματίσουμε τη διεργασία με τον
±stud@vm2:~$ # συνδυασμό πλήκτρων ctrl+c. Το ctrl+c στέλνει σήμα
±stud@vm2:~$ # διακοπής (SIGINT) στη διεργασία που είναι ενεργή
±stud@vm2:~$ # (βρίσκεται στο προσκήνιο).
±stud@vm2:~$ #
±stud@vm2:~$ # Εναλλακτικά, μπορούμε να χρησιμοποιήσουμε τον συνδυασμό
±stud@vm2:~$ # πλήκτρων ctrl+z, με τον οποίο παγώνουμε προσωρινά τη διεργασία.
±stud@vm2:~$ sleep 100
~
§^Z
§[1]+ Stopped sleep 100
±stud@vm2:~$ #
±stud@vm2:~$ # Στη συνέχεια μπορούμε να δούμε τις εργασίες που έχουμε
±stud@vm2:~$ # εκτελέσει με την βοήθεια της εντολής jobs. Μπορούμε
±stud@vm2:~$ # επίσης να τερματίσουμε κάποια εργασία με τη βοήθεια της
±stud@vm2:~$ # εντολής kill %jobid, όπου jobid ο αριθμός της
±stud@vm2:~$ # εργασίας που θέλουμε να τερματίσουμε.
±stud@vm2:~$ jobs
§[1]+ Stopped sleep 100
±stud@vm2:~$ kill %1
§
§[1]+ Stopped sleep 100
±stud@vm2:~$ jobs
§[1]+ Terminated sleep 100
±stud@vm2:~$ jobs
±stud@vm2:~$
±stud@vm2:~$ #
±stud@vm2:~$ # Δηλαδή, η εργασία αλλάζει κατάσταση από Stopped σε
±stud@vm2:~$ # Terminated και στη συνέχεια αφαιρείται από τη λίστα των
±stud@vm2:~$ # εργασιών.
±stud@vm2:~$ #
±stud@vm2:~$ # Εναλλακτικά, θα μπορούσαμε να θέσουμε την παγωμένη διεργασία
±stud@vm2:~$ # στο παρασκήνιο ή να την ξαναφέρουμε στο προσκήνιο. Αυτό
±stud@vm2:~$ # επιτυγχάνεται με τις εντολές bg ή fg, αντίστοιχα.
±stud@vm2:~$ # Εαν τις εκτελέσουμε χωρίς παραμέτρους, τότε αναφερόμαστε
±stud@vm2:~$ # στην τελευταία εργασία. Αλλιώς, μπορούμε να θέσουμε σε αυτές
±stud@vm2:~$ # την παράμετρο %jobid, όπως στην εντολή kill.
±stud@vm2:~$ sleep 100
§^Z
§[1]+ Stopped sleep 100
±stud@vm2:~$ bg
§[1]+ sleep 100 &
±stud@vm2:~$ jobs
§[1]+ Running sleep 100 &
±stud@vm2:~$ #
±stud@vm2:~$ # Παρατηρούμε ότι η εντολή bg οδηγεί στην αλλαγή της κατάστασης
±stud@vm2:~$ # της εργασίας από Stopped σε Running, ενώ προστίθεται ο
±stud@vm2:~$ # χαρακτήρας & στο τέλος της εντολής. Αυτός ο χαρακτήρας ορίζει
±stud@vm2:~$ # ότι η εργασία εκτελείται στο παρασκήνιο.
±stud@vm2:~$ #
±stud@vm2:~$ # Θα μπορούσαμε να θέσουμε απ'ευθείας μια διεργασία στο
±stud@vm2:~$ # παρασκήνιο, εαν προσθέσουμε τον χαρακτήρα & στο τέλος
±stud@vm2:~$ # της εντολής που τη δημιουργεί. Για παράδειγμα:
±stud@vm2:~$ sleep 100 &
§[1] 40556
±stud@vm2:~$ jobs
§[1]+ Running sleep 100 &
±stud@vm2:~$ #
±stud@vm2:~$ # Ας δούμε τώρα τις διεργασίες με τη βοήθεια της εντολής ps.
±stud@vm2:~$ # Μπορούμε να τερματίσουμε μια διεργασία με την εντολή kill
±stud@vm2:~$ # και το αναγνωριστικό της διεργασίας (process id, PID).
±stud@vm2:~$ ps
§ PID TTY TIME CMD
§35950 pts/0 00:00:00 bash
§40556 pts/0 00:00:00 sleep
§40727 pts/0 00:00:00 ps
±stud@vm2:~$ kill 35950
~
±stud@vm2:~$ #
±stud@vm2:~$ # Η εντολή kill στέλνει ένα "ευγενικό" σήμα τερματισμού στη
±stud@vm2:~$ # διεργασία. Η διεργασία συνήθως τερματίζεται μετά από λίγη ώρα,
±stud@vm2:~$ # μόλις εκτελεστεί ο προβλεπόμενος κώδικας τερματισμού της.
±stud@vm2:~$ #
±stud@vm2:~$ # Στην περίπτωση που η διεργασία είναι κολλημένη ή απαιτείται
±stud@vm2:~$ # άμεσος τερματισμός της, μπορούμε να αξιοποιήσουμε την
±stud@vm2:~$ # παράμετρο -9:
±stud@vm2:~$ sleep 100 &
§[1] 41133
±stud@vm2:~$ ps
§ PID TTY TIME CMD
§41101 pts/0 00:00:00 bash
§41133 pts/0 00:00:00 sleep
§41135 pts/0 00:00:00 ps
±stud@vm2:~$ kill -9 41133
~
§[1]+ Killed sleep 100
±stud@vm2:~$ #
±stud@vm2:~$ # Η διεργασία τερματίστηκε.