Στο Linux, ενώ εκτελείτε μια διαδικασία που χρειάζεται πολύ χρόνο για να τρέξει, μπορεί να είναι ένας πόνος να τερματίσετε τη διαδικασία στο μισό, επειδή είστε εκτός χρόνου ή γιατί πρέπει να φτάσετε στο σπίτι. Εάν έχετε συναντήσει ποτέ μια κατάσταση όπως αυτή πριν, τότε πραγματικά πρέπει να πάρετε το εργαλείο Reptyr.

Τι είναι το Reptyr;

Το εργαλείο Reptyr είναι ένα βοηθητικό πρόγραμμα γραμμής εντολών που εκτελεί μια διαδικασία που εκτελείται από ένα τερματικό και το μεταφέρει σε άλλο. Με άλλα λόγια, επαναλαμβάνει μια διαδικασία. Το όνομα θυμίζει επίσης ένα ψευδοτελικό - συχνά συντομογραφούμενο ως "PTY". Ένα ψευδοτερματικό, εάν δεν γνωρίζατε, είναι ένα εργαλείο που επιτρέπει δύο συνδέσεις μεταξύ των δύο διαδικασιών (master και slave). Αυτό που γράφετε σε ένα αντικατοπτρίζεται στο άλλο.

Πώς λειτουργεί το Reptyr;

Με το Reptyr, μπορείτε να ξεκινήσετε μια διαδικασία στην εργασία και να την ολοκληρώσετε στο σπίτι (εάν χρησιμοποιείτε SSH). Υπάρχουν και άλλα εργαλεία που είναι παρόμοια με το εργαλείο Reptyr, όπως το Screenify και Retty και ίσως έχετε ήδη αντιμετωπίσει αυτά. Ωστόσο, η Reptry έχει αποδειχθεί ότι είναι καλύτερη από τους ανταγωνιστές της αυτή τη στιγμή. Έχει λιγότερα σφάλματα και είναι πολύ πιο αποτελεσματική. Το πρόβλημα με αυτά τα άλλα εργαλεία είναι ότι το τερματικό ελέγχου των διαδικασιών δεν αλλάζει ακόμα και όταν μεταφέρεται η διαδικασία. Εάν χρησιμοποιείτε το Screenify, για παράδειγμα, και προσπαθείτε να χρησιμοποιήσετε τις εντολές "^ c" ή "^ z" στο νέο τερματικό, δεν λειτουργούν σωστά. Αυτό συμβαίνει επειδή εκτελούνται στο τερματικό που έχει τον έλεγχο αυτή τη στιγμή. Εάν αλλάξετε το μέγεθος ενός παραθύρου προγράμματος ή δοκιμάσετε την εντολή " less ", δεν λειτουργεί σωστά, καθώς το Linux ξεγελάει να σκέφτεται ότι εξακολουθείτε να λειτουργείτε στο παλιό τερματικό.

Πώς λειτουργεί το Reptyr ακριβώς; Στόχευσε τη διαδικασία που προσπαθούμε να μεταναστεύσουμε χρησιμοποιώντας το ptrace API, ανοίγει ένα νέο τερματικό και χρησιμοποιεί το "dup2" για να αντικαταστήσει τους παλιούς περιγραφείς αρχείων. Το Reptyr είναι επίσης διαφορετικό από άλλες διαδικασίες, καθώς αλλάζει το τερματικό ελέγχου. Μπορείτε να ελέγξετε το επίσημο blog για να λάβετε τα στοιχεία, αλλά ουσιαστικά περιλαμβάνει τη χειραγώγηση του χαρακτηριστικού ioctl, TIOCSCTTY στο Linux για να αλλάξετε τη διαδικασία ελέγχου.

Εγκατάσταση

Σε μια διανομία που βασίζεται στο Ubuntu, μπορείτε να χρησιμοποιήσετε το apt-get για να εγκαταστήσετε την εφαρμογή:

 sudo apt-get install reptyr 

Μετακίνηση μιας διαδικασίας σε μια νέα οθόνη με Reptyr

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

Πρώτον, πρέπει να αναστείλετε τη διαδικασία που πρέπει να μεταφέρετε. Αυτό μπορεί να γίνει με διαφορετικούς τρόπους - όλα εξαρτώνται από τη διαδικασία που εκτελείτε (κυρίως "^ z" έργα). Στη συνέχεια, αφού το έχετε αναστείλει, θα πρέπει να συνεχίσετε τη διαδικασία στο παρασκήνιο. Η εντολή γι 'αυτό, δεν ξέρατε, είναι,

 bg 

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

 disable name_of_process 

Στη συνέχεια, θα πρέπει να ξεκινήσετε την εφαρμογή λογισμικού οθόνης. Είναι πραγματικά ένα πολύ βολικό εργαλείο - είναι εύκολο να το κατεβάσετε, αν δεν το έχετε. Μπορείτε να το ξεκινήσετε με την ακόλουθη εντολή:

 οθόνη 

Και τώρα πρέπει να ανακτήσετε τη διαδικασία που προσπαθείτε να μεταναστεύσετε. Λάβετε υπόψη ότι χρειάζεστε το PID της τρέχουσας διαδικασίας για αυτήν την εντολή. Εναλλακτικά, μπορείτε να χρησιμοποιήσετε την εντολή " pgrep ". Εάν γνωρίζετε το PID, πληκτρολογήστε:

 reptyr PID 

Εάν δεν γνωρίζετε το PID:

 reptyr $ (pgrep name_of_process) 

Και τελειώσατε! Τώρα μπορείτε να αποσυνδεθείτε από τη συνεδρία σας χωρίς να σκοτώσετε τη διαδικασία.

ανακεφαλαιώσουμε

 $ ctrl + z # Αναστολή της τρέχουσας διαδικασίας $ disown  # Απόσπαση της διαδικασίας από την οθόνη του κελύφους # Οθόνη εκκίνησης $ reptyr $ (pgrep irssi) # Επαναφορά της διαδικασίας 

Το Reptyr είναι ανοικτού κώδικα και εντελώς δωρεάν. Είναι εύκολο να ρυθμίσετε και να χρησιμοποιήσετε, οπότε προχωρήστε και δοκιμάστε. Είμαι βέβαιος ότι θα το βρείτε πολύ βολικό.

Πιστοποίηση εικόνας: Techiezone, Mtellin @ Flickr