Παρακάτω περιγράφονται όλα τα τεστ του autolab καθώς και κάποιες εντολές για τον έλεγχο διεργασιών μέσα από το τερματικό. ============================================================================= test0: Ελέγχει στοιχεία του Makefile. ============================================================================= test1: Ελέγχει τη συμπεριφορά του κυρίως προγράμματος αν εκτελεστεί με λάθος αριθμό ορισμάτων. Σε περίπτωση μη-σωστής συμπεριφοράς, εκτυπώνεται μήνυμα λάθους. Ελέγχει τη συμπεριφορά του προγράμματος αν αποτύχει κάποια κλήση συστήματος. Σημειώστε πως δεν ελέγχει όλα τα πιθανά σφάλματα. Πιο ενδελεχής έλεγχος θα γίνει εκ των υστέρων. ============================================================================= test2: Ελέγχει τη συμπεριφορά του κυρίως προγράμματος αν ο κώδικας του προγράμματος προς βαθμολόγηση έχει λάθη στη μεταγλώττιση. Επιπλέον, ανάλογα με το υποτεστ, μπορεί να υπάρχουν ή όχι και warnings. Σε κάθε περίπτωση όμως, το penalty πρέπει να είναι -100. ============================================================================= test3: Ελέγχει τη συμπεριφορά του κυρίως προγράμματος αν ο κώδικας του προγράμματος προς βαθμολόγηση έχει warnings στη μεταγλώττιση με έμφαση σε οριακές περιπτώσεις. Το πρόγραμμα προς βαθμολόγηση παράγει πάντα σωστή έξοδο ============================================================================= test4: To test4 ελέγχει αποκλειστικά το πρόγραμμα p4diff.c. Στόχοι του είναι (α) να προσωμοιώσει την εγγραφή στον αγωγό Α λιγότερων ή περισσότερων bytes από τα 64 που διαβάζει το πρόγραμμα p4diff κάθε φορά και (β) να ελέγξει την ορθότητα των αποτελεσμάτων του p4diff χωρίς να εμπλέκεται το κυρίως πρόγραμμα. Για δικούς σας ελέγχους, κατασκευάστε δύο αρχεία (είτε όμοια, είτε όχι, είτε ίδιου μεγέθους, είτε όχι), έστω file1 και file2 και τρέξτε: ./p4diff file1 < file2 echo $? Το echo $? θα σας εκτυπώσει στο τερματικό την τιμή επιστροφής του p4diff. Εάν τα αρχεία έχουν ανόμοια μεγέθη, δοκιμάστε και ./p4diff file2 < file1 echo $? Θα πρέπει να πάρετε το ίδιο αποτέλεσμα. Σε κάθε περίπτωση, βεβαιωθείτε ότι οι πράξεις είναι σωστές. Για να ελέγξετε γρήγορα το μέγεθος ενός αρχείου, έστω file1, μπορείτε να γράψετε στο τερματικό ls -l file1 και να δείτε τον αριθμό πριν την ημερομηνία. ============================================================================= test5: Ελέγχει περιπτώσεις (σε διάφορα υποτεστ) όπου o κώδικας προς βαθμολόγηση μεταγλωττίζεται με ή χωρίς warnings, χρησιμοποιεί ή όχι ορίσματα, και διαβάζει ή όχι από τη συμβατική του είσοδο, παράγει ή όχι σωστή έξοδο. ============================================================================= test6: Ελέγχει περιπτώσεις (σε διάφορα υποτεστ) όπου o κώδικας προς βαθμολόγηση τερματίζει με κάποιο σήμα. Σημειώστε πως το σήμα μπορεί να μην είναι κάποιο από αυτά που εξετάζονται. Σε αυτή την περίπτωση δε θα πρέπει να δοθεί penalty για memory access. Η έξοδος του κώδικα προς βαθμολόγηση μπορεί να είναι λανθασμένη ή όχι, ανάλογα με το υποτέστ. Εάν η έξοδος δεν είναι λανθασμένη, τότε στο output θα υπάρχει μη-μηδενικό σκορ, κι απλά θα υπάρχει και το penalty λόγω του σήματος. Για τους δικούς σας ελέγχους, αν θέλετε να τερματίζει το πρόγραμμα προς βαθμολόγηση μέσω σήματος, μπορείτε να εισάγετε μια εντολή kill σε αυτό η οποία στέλνει το σήμα που θέλετε στο ίδιο πρόγραμμα (βρίσκοντας το pid του μέσω της getpid(). ) ============================================================================= test7: Έλεγχοι της λειτουργίας του timeout. Ανάλογα με το υποτεστ, o κώδικας προς βαθμολόγηση μεταγλωττίζεται με ή χωρίς warnings και η έξοδός του είναι σωστή ή όχι. ============================================================================= Μπορείτε να δείτε τις διεργασίες που εκτελέστηκαν μέσα από ένα τερματικό γράφοντας ps σε αυτό. Αυτό δε θα σας δείξει τυχόν διεργασίες που εκτελέστηκαν μέσα από κάποιο άλλο τερματικό. Για να δείτε όλες τις διεργασίες σας στο σύστημα σας, γράφετε ps -u $USER ή σκέτο ps u Για να δείτε και τα process group ids αν σας ενδιαφέρει, γράψτε ps -u $USER user,pid,gid,cmd Αν θέλετε να φιλτράρετε την έξοδο για να δείτε πληροφορίες μόνο για μια διεργασία της οποίας ξέρετε το όνομα, για παράδειγμα hw4, γράφετε: ps u | grep hw4 Για να σκοτώσετε μια διεργασία της οποίας γνωρίζετε το pid, ας πούμε 1234, γράφετε kill -9 1234 Το 9 είναι το SIGKILL. Για να στείλετε κάποιο άλλο σήμα, δείτε πληροφορίες στο man signal Για να σκοτώσετε όλες τις διεργασίες με ένα συγκεκριμένο όνομα (π.χ. hw4), γράφετε killall hw4