Ένα μικρό κόλπο που κάνει εύκολη τη ζωή μας στο τερματικό. Δεν ξέρω αν δικαιολογεί ένα ολόκληρο άρθρο και αφορά κυρίως όσους κάνουν προγραμματισμό, αλλά θα δούμε μερικές εντολές που κάνουν ευκολότερο τον τερματισμό διεργασιών.
Αλήθεια, σε σένα το λέω: πόσες φορές έχεις βρεθεί στην ανάγκη να γράψεις;
ps -aux | grep <process>
Και στη συνέχεια να τερματίσεις τη διεργασία με την εντολή kill αντιγράφοντας το νούμερο; Α! Είσαι από αυτούς τους εξυπνάκηδες που ξέρουν την εντολή killall. Ναι, αλλά θα πρέπει να γράψεις το πλήρες όνομα, αν θέλεις κάποιο pattern; H σου έχω άσκηση: Τύπωσε και μετά στείλε ένα σήμα τερματισμού σε όλες τις διεργασίες που έχουν ένα συγκεκριμένο pattern και τρέχουν σε ένα συγκεκριμένο pty.
Εδώ θα βοηθήσουν οι εντολές pgrep που συνδυάζει τις ps και grep καθώς και η εντολή pkill που βρίσκει και τερματίζει:
Ένα απλό παράδειγμα:
Μια καλή χρήση σε script:
if ! pgrep -x bacon > /dev/null; then
echo "bacon is not running"
bacon
fi
Επιπλέον παραδείγματα:
-
Τερμάτισε την ποιο πρόσφατη χρονική εντολή κάποιου χρήστη:
pkill -9 -u asfodelus -n bacon -
H την παλαιότερη (με ανάδραση):
pkill -9 -u asfodelus -ο bacon -e
Bonus chapter:
H εντολή pidwait περιμένει ένα ή περισσότερα πρόγραμμα να τερματίσουν πραγματικά.
pkill firefox # gently terminate
pidwait firefox # wait until all firefox instances are gone
Με αυτά ξύσαμε την επιφάνεια του τι μπορούν να κάνουν. Έχουν γνώση των cgroups καθώς και των namespaces, της κατάστασης της διεργασίας, ακόμα και αν η διεργασία έχει εγκαταστήσει κάποιο handler για το σήμα που θέλεις να στείλεις. Με άλλα λόγια είναι αρκετά δυνατές για πολύπλοκες καταστάσεις και δες το man page για περισσότερα.
Για κάποιο λόγο οι εντολές αυτές, αν και υπάρχουν εδώ και δεκαετίες δεν είναι ιδιαίτερα γνωστές (ή είναι ιδέα μου;). Ελπίζω όσοι τις χρειάζονται τώρα που τις ξέρουν να μπορέσουν κάνουν τη ζωή καθώς και τα scripts τους λίγο καλύτερα.
