* Αντικατάσταση, όχι εκτέλεση: Το `exec` δεν εκτελεί * ένα νέο πρόγραμμα με την παραδοσιακή έννοια. Αντικαθιστά * την εικόνα της τρέχουσας διαδικασίας με την εικόνα του νέου προγράμματος. Αυτό σημαίνει ότι η αρχική διαδικασία ουσιαστικά εξαφανίζεται και το νέο πρόγραμμα παίρνει τη θέση του.
* Μεταφορά άμεσης ελέγχου: Η κλήση του συστήματος «Exec» μεταφέρει απευθείας τον έλεγχο στο νέο πρόγραμμα χωρίς να επιστρέψει στον καλούντα. Είναι σαν η αρχική διαδικασία "ανταλλαγή" για το νέο.
Παράδειγμα:
`` `c
#include
int main () {
// Προσπαθήστε να αντικαταστήσετε την τρέχουσα διαδικασία με το "LS -L"
αν (execlp ("ls", "ls", "-l", null) ==-1) {
// Φτάστε μόνο αν αποτύχει το execlp
perror ("execlp απέτυχε")?
επιστροφή 1;
}
// Αυτή η γραμμή δεν θα προσεγγιστεί ποτέ
printf ("Αυτό δεν θα εκτυπωθεί ποτέ. \ n");
επιστροφή 0;
}
`` `
Γιατί το `exec` είναι χρήσιμο
* Αποδοτικότητα: Αποφεύγει την επιβάρυνση της δημιουργίας μιας νέας διαδικασίας και τη διαχείριση του χώρου μνήμης.
* Άμεση έλεγχος: Παρέχει έναν μηχανισμό για μια διαδικασία να μεταβαίνει άψογα σε άλλο πρόγραμμα.
Βασικά σημεία
* `exec` παραλλαγές (` execl`, `execv`,` execlp`, `execvp`) όλα έχουν την ίδια συμπεριφορά όσον αφορά τις τιμές επιστροφής.
* Εάν το `exec` αποτύχει (π.χ., δεν βρέθηκε αρχείο, προβλήματα άδειας), επιστρέφει` -1` και ορίζει `errno` για να υποδείξει το σφάλμα.
* Για να έχετε ένα πρόγραμμα να εκτελέσετε ένα άλλο και στη συνέχεια να συνεχίσετε, πρέπει να χρησιμοποιήσετε το «πιρούνι» για να δημιουργήσετε μια διαδικασία παιδιού πριν καλέσετε το «exec» στο παιδί.
Επιτρέψτε μου να ξέρω αν έχετε άλλες ερωτήσεις σχετικά με το «exec» ή τις διαδικασίες στο UNIX!
Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα