Αυτό το πρόγραμμα χρησιμοποιεί το Python's `os.fork ()` για τη δημιουργία διαδικασιών. Θυμηθείτε ότι η δημιουργία ενός μεγάλου αριθμού διαδικασιών μπορεί να συντρίψει το σύστημά σας. Δοκιμάστε με μικρές τιμές του «n» πρώτα.
`` `Python
εισαγωγή λειτουργικού συστήματος
Εισαγωγή sys
def create_binary_tree (βάθος, επίπεδο =0):
"" "
Δημιουργεί αναδρομικά ένα δυαδικό δέντρο διαδικασιών.
Args:
Βάθος:Το επιθυμητό βάθος του δέντρου.
Επίπεδο:Το τρέχον επίπεδο στο δέντρο (ξεκινά στο 0).
"" "
Εάν επίπεδο <βάθος:
εκτύπωση (F "Process {os.getPID ()} σε επίπεδο {επίπεδο}") # εκτυπώστε το αναγνωριστικό διαδικασίας και το επίπεδο
# Δημιουργία αριστερού παιδιού
pid_left =os.fork ()
Εάν PID_LEFT ==0:# Παιδική διαδικασία
create_binary_tree (βάθος, επίπεδο + 1)
OS._EXIT (0) # ΣΗΜΑΝΤΙΚΟ:EXIT Παιδική διαδικασία για να αποφύγετε την άπειρη επανάληψη
# Δημιουργήστε το σωστό παιδί
pid_right =os.fork ()
Εάν PID_RIGHT ==0:# Παιδική διαδικασία
create_binary_tree (βάθος, επίπεδο + 1)
OS._EXIT (0) # ΣΗΜΑΝΤΙΚΟ:EXIT Παιδική διαδικασία για να αποφύγετε την άπειρη επανάληψη
# Η γονική διαδικασία περιμένει τα παιδιά να τελειώσουν (προαιρετικά, αλλά καλή πρακτική)
OS.WaitPID (PID_LEFT, 0)
OS.WaitPID (PID_RIGHT, 0)
Εάν __name__ =="__main__":
Εάν ο Len (sys.argv)! =2:
Εκτύπωση ("Χρήση:Python Binary_tree.py
sys.exit (1)
δοκιμή:
βάθος =int (sys.ArgV [1])
Εάν βάθος <0:
("Το βάθος πρέπει να είναι ένας μη αρνητικός ακέραιος.")
sys.exit (1)
create_binary_tree (βάθος)
Εκτός από το ValueError:
εκτύπωση ("Μη έγκυρη τιμή βάθους. Εισαγάγετε έναν ακέραιο.")
sys.exit (1)
`` `
Πώς να εκτελέσετε:
1. Αποθήκευση: Αποθηκεύστε τον κώδικα ως `binary_tree.py`.
2. Εκτέλεση από τη γραμμή εντολών: `python binary_tree.py
Σημαντικές εκτιμήσεις:
* Χειρισμός σφαλμάτων: Ο κώδικας περιλαμβάνει βασικό χειρισμό σφαλμάτων για μη έγκυρα επιχειρήματα γραμμής εντολών.
* Τερματισμός διαδικασίας: Οι κλήσεις "OS._EXIT (0) είναι κρίσιμες. Χωρίς αυτούς, κάθε παιδική διαδικασία θα δημιουργούσε αναδρομικά περισσότερες διαδικασίες, οδηγώντας σε μια ανεξέλεγκτη έκρηξη διαδικασιών.
* Χρήση πόρων: Να είστε ενήμεροι για την εκθετική ανάπτυξη των διαδικασιών. Ένα βάθος 4 θα δημιουργήσει ήδη πολλές διαδικασίες. Ένα βάθος 10 πιθανότατα θα καταρρεύσει το σύστημά σας.
* Διαχείριση διαδικασιών: Οι κλήσεις "OS.WaitPID () είναι προαιρετικές, αλλά συνιστώνται για καλύτερη διαχείριση διαδικασιών. Εξασφαλίζουν ότι η γονική διαδικασία περιμένει τα παιδιά της να τελειώσουν πριν από την έξοδο. Χωρίς αυτούς, η διαδικασία των γονέων σας μπορεί να τερματιστεί πριν ολοκληρωθούν ορισμένες διαδικασίες παιδιών.
* Περιορισμοί λειτουργικού συστήματος: Ο μέγιστος αριθμός διαδικασιών που μπορείτε να δημιουργήσετε περιορίζεται από το λειτουργικό σας σύστημα.
Αυτή η βελτιωμένη έκδοση παρέχει καλύτερη διαχείριση σφαλμάτων και διαχείριση διαδικασιών, καθιστώντας την ασφαλέστερη και πιο ισχυρή. Θυμηθείτε να ξεκινάτε πάντα με μικρές τιμές του «n» για να δοκιμάσετε και να κατανοήσετε τη συμπεριφορά πριν επιχειρήσετε μεγαλύτερες τιμές.
Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα