בלינוקס, בעת הפעלת תהליך זה צריך זמן רב כדי להפעיל, זה יכול להיות כאב כדי לסיים אותו באמצע הדרך כי אתה מחוץ לזמן, או כי אתה צריך להגיע הביתה. אם יש לך אי פעם נתקל במצב כזה לפני, אז אתה באמת צריך לקבל את הכלי רפטייר.

מה זה רפטיר?

הכלי Reptyr הוא כלי שורת הפקודה אשר לוקח תהליך ריצה ממסוף אחד מעביר אותו אחרת. במילים אחרות, הוא חוזר על תהליך. השם מזכיר גם פסאודוטרמינל - לעתים קרובות מקוצר כמו "PTY". פסאודו-כרמינלי, אם לא ידעת, הוא כלי המאפשר לשני תהליכים (מאסטר ועבד) להיות קשורים זה לזה. מה שאתה כותב על אחד משתקף באחר.

איך עובד רפטיר?

עם Reptyr, אתה יכול להתחיל תהליך בעבודה ולסיים אותו בבית (אם אתה משתמש SSH). ישנם כלים אחרים הדומים לכלי ה- Reptyr, כמו Screenify ו- Retty, וייתכן שתיתקל בהם לפני כן. עם זאת, Reptry הוכיח להיות טוב יותר מאשר המתחרים שלה כרגע. יש בו פחות באגים והוא הרבה יותר יעיל. הבעיה עם כלים אחרים אלה היא כי מסוף השליטה של ​​תהליכים לא השתנה גם כאשר התהליך הוא היגרו. אם אתה משתמש ב- Screenify, לדוגמה, ואתה מנסה להשתמש בפקודות "^ c" או "^ z" במסוף החדש, הן אינן פועלות כראוי. הסיבה לכך היא כי הם הוצאו להורג על הטרמינל כי יש שליטה כרגע. אם תשנה את גודל חלון התוכנית או תנסה את הפקודה " less ", היא לא תפעל כראוי, כמו לינוקס שולל לחשוב שאתה עדיין פועל על הטרמינל הישן.

אז איך רפטיר עובד בדיוק? היא מכוונת את התהליך שאנחנו מחפשים להעביר באמצעות API ptrace, פותחת מסוף חדש ומשתמש "dup2" כדי להחליף את מתארי הקובץ הישן. רפטיר גם שונה מתהליכים אחרים בכך שהוא משנה את מסוף השליטה. אתה יכול לבדוק את הבלוג הרשמי כדי לקבל את הפרטים, אבל זה בעצם כרוך מניפולציה של ioctl, TIOCSCTTY תכונה בלינוקס כדי לשנות את תהליך השליטה.

הַתקָנָה

בהפצה מבוססת אובונטו, ניתן להשתמש ב- apt-get כדי להתקין את היישום:

 sudo apt-get להתקין reptyr 

העברת תהליך למסך חדש עם רפטיר

אתה יכול גם להשתמש Reptyr, יחד עם האפליקציה מסך מסך גנו (או יישום מרבב מסוף דומה), כדי להעביר את התהליך שלך לפגישה מסך חדש. לדוגמה, אם יש לך תהליך ריצה ואתה צריך להפעיל מחדש את השרת שלך, אתה יכול להעביר אותו לפגישה מסך חדש, כך שתוכל לגשת אליו שוב לאחר הפעלה מחדש של המערכת. נשמע שימושי, נכון? אז איך עושים את זה בדיוק?

ראשית, עליך להשעות את התהליך שעליך להעביר. זה יכול להיעשות בדרכים שונות - הכל תלוי בתהליך אתה מפעיל (בעיקר "^ z" עובד). לאחר מכן, לאחר השעיית זה, אתה צריך לחדש את התהליך ברקע. הפקודה עבור זה, אתה לא יודע, הוא,

 bg 

לאחר מכן, יהיה עליך לבודד את תהליך הילד מתהליך ההורה. הסיבה לכך היא כי תהליך ההורה יסתיים במהלך ההפעלה מחדש, ואתה צריך לשמור את זה מתרחש לתהליך הילד. לשם כך, השתמש בפקודה disown:

 שם 

לאחר מכן תצטרך להפעיל את יישום תוכנת המסך. זה בעצם כלי שימושי למדי - קל להוריד, אם אין לך את זה. אתה מפעיל את זה עם הפקודה הבאה:

 מָסָך 

ועכשיו אתה צריך לאחזר את התהליך שאתה מנסה להעביר. שים לב שאתה צריך את PID של תהליך ריצה עבור פקודה זו. לחלופין, ניתן להשתמש בפקודה " pgrep ". אם אתה יודע את ה- PID, הקלד:

 פפטיר 

אם אינך יודע את ה- PID:

 reptyr $ (pgrep name_of_process) 

וסיימת! עכשיו אתה יכול להתנתק מושב שלך מבלי להרוג את התהליך.

לסכם

 $ ctrl + z # השהה את התהליך הנוכחי $ disown  # לנתק את התהליך מתוך מסך $ פגז # מסך הפעלה $ reptyr $ (pgrep irssi) # לחזור לתהליך 

רפטייר הוא קוד פתוח לגמרי בחינם. זה קל להתקנה ולהשתמש, אז קדימה לנסות את זה. בטוח שאתה תמצא את זה די שימושי.

אשראי תמונה: Techiezone, Mtellin @ Flickr