Μάθετε πώς να εκτελείτε σωστά τα υποσέλιδα χρησιμοποιώντας τα scripts Bash

Πώς να καθοδηγήσετε τα υποσέλιδα να εκτελούνται παράλληλα στο παρασκήνιο

Ένα κέλυφος είναι μια βασική διεπαφή για την εισαγωγή εντολών σε ένα σύστημα Linux. Με αυτό, μπορείτε να εισάγετε μια εντολή απευθείας ή να καθορίσετε ένα αρχείο (δέσμη ενεργειών) που περιέχει μια ακολουθία εντολών προς εκτέλεση. Τα κοχύλια είναι οργανωμένα σε μια ιεραρχία και κάθε κέλυφος μπορεί να δημιουργήσει ένα νέο κέλυφος. Το νέο κέλυφος θεωρείται μια διαδικασία παιδιού - ένα υποσύνολο - του γονικού κελύφους που το δημιουργεί.

Από προεπιλογή, ένα υποσύνολο εξαρτάται από το γονικό του με την έννοια ότι αν τερματιστεί η γονική διαδικασία, ο υποστέλλος τερματίζεται επίσης. Κάθε έξοδος μεταβιβάζεται από το υποσύνολο στο γονικό κέλυφος.

Πώς να δημιουργήσετε ένα υποσύνολο

Σε ένα σενάριο κελύφους Bash, δημιουργείτε ένα υποσέλιδο χρησιμοποιώντας τη συμβολική παρένθεση:

(count = 1 ενώ το [$ count -le 99] κάνει echo "$ count" ύπνος 1 ((count ++))) echo "Finished"

Στο παράδειγμα, ο βρόχος while περικλείεται σε παρένθεση, η οποία προκαλεί την εκτέλεση του σε ένα υποκείμενο του κελύφους στο οποίο εκτελείται το αρχείο δέσμης ενεργειών.

Εκτέλεση υποσέλιδου στο φόντο

Εάν δεν καθορίσετε ότι το υποσύνολο πρόκειται να εκτελεστεί στο παρασκήνιο, το γονικό κέλυφος περιμένει να ολοκληρωθεί ο υποστέλλος πριν συνεχίσετε με το υπόλοιπο της δέσμης ενεργειών. Ωστόσο, εάν θέλετε να τρέξετε παράλληλα τα υποσύνολα, τα εκτελείτε στο παρασκήνιο, το οποίο επιτυγχάνεται με το χαρακτήρα ampersand που ακολουθεί την έκφραση υποσκληρών, όπως φαίνεται εδώ:

(count = 1 ενώ το [$ count -le 99] κάνει echo "$ count" ύπνος 1 ((count ++))) & echo "Finished"

Εκτέλεση πολλαπλών υποσυστημάτων σε παράλληλη

Αν δημιουργείτε πολλαπλά υποσέλιδα ως διαδικασίες παρασκηνίου, μπορείτε να εκτελέσετε εργασίες παράλληλα. Συνήθως, το λειτουργικό σύστημα χρησιμοποιεί διαφορετικούς επεξεργαστές ή πυρήνες για κάθε διαδικασία και υποεπεξεργασία, υποθέτοντας ότι υπάρχουν τουλάχιστον τόσα επεξεργαστές ή πυρήνες όπως υπάρχουν διαδικασίες. Διαφορετικά, οι εργασίες εκχωρούνται στους ίδιους επεξεργαστές ή πυρήνες. Στην περίπτωση αυτή, ο επεξεργαστής ή ο πυρήνας αλλάζουν συνεχώς μεταξύ των καθηκόντων που έχουν ανατεθεί μέχρι να ολοκληρωθούν οι εργασίες. Το επόμενο παράδειγμα έχει δύο υποεπεξεργασίες. Ο πρώτος μετράει από 1 έως 99 και ο δεύτερος από 1000 έως 1099.

(count = 1 ενώ το [$ count -le 99] κάνει echo "$ count" ύπνος 1 ((count ++)) done) & (count = 1000 ενώ [$ count -le 1099] κάνουν echo "$ count" ύπνος 1 ((count ++)) done) & echo "Finished"

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

(count = 1 ενώ το [$ count -le 99] κάνει echo "$ count" ύπνος 1 ((count ++)) done) & (count = 1000 ενώ [$ count -le 1099] κάνουν echo "count" sleep 1 ((count ++)) done) & wait echo "Finished"

Χρήσεις για υποσέλιδα

Τα υποσέλιδα είναι χρήσιμα όταν οι εντολές πρέπει να εκτελούνται σε ένα συγκεκριμένο περιβάλλον ή κατάλογο. Αν κάθε εντολή εκτελείται σε διαφορετικό υποσύνολο, δεν υπάρχει κίνδυνος να μετατραπούν οι μεταβλητές ρυθμίσεις. Με την ολοκλήρωση, οι ρυθμίσεις και ο τρέχων κατάλογος δεν χρειάζεται να αποκατασταθούν, καθώς το περιβάλλον της γονικής διαδικασίας δεν επηρεάζεται από καμία από τις υποεπεξεργαστές του.

Τα υποσύνολα μπορούν να χρησιμοποιηθούν σε ορισμούς λειτουργιών έτσι ώστε να μπορούν να εκτελούνται πολλές φορές με διαφορετικές παραμέτρους.