ניהול ג'ובים בלינוקס - foreground ו-background¶
מכירים את הרגע שבו אתם מריצים פקודה בטרמינל, היא לוקחת המון זמן, והטרמינל פשוט "נתקע" עד שהיא מסיימת? רוב המתחילים בלינוקס פשוט פותחים טרמינל נוסף ומתעלמים מהבעיה. אבל יש דרך הרבה יותר אלגנטית לנהל את זה, וזה נקרא ניהול ג'ובים - job control.
מה זה בכלל ג'וב¶
כל פקודה שאתם מריצים בשל (shell) הופכת למה שנקרא ג'וב. כשהג'וב רץ בחזית, הוא נקרא foreground, וזה אומר שהטרמינל שלכם תפוס ומחכה שהוא יסיים. אתם לא יכולים להקליד פקודות נוספות עד שהוא נגמר. זה בסדר גמור לפקודות מהירות, אבל כואב כשמדובר בתהליך שלוקח דקות או שעות.
הפתרון הוא להריץ את הג'וב ב-background, כלומר ברקע, כדי שהטרמינל יתפנה מיד ותוכלו להמשיך לעבוד.
איך מריצים תהליך ברקע¶
הדרך הכי פשוטה היא להוסיף סימן & בסוף הפקודה:
השל מיד יחזיר לכם שליטה, ויציג מספר בסוגריים מרובעים - זה מזהה הג'וב - ואחריו את ה-PID של התהליך. מרגע זה הפקודה רצה ברקע ואתם חופשיים להמשיך.
איך רואים אילו ג'ובים רצים¶
הפקודה jobs מציגה רשימה של כל הג'ובים הפעילים בשל הנוכחי, כולל המספר שלהם והסטטוס - רץ, עצור, או הסתיים.
מעצירים ג'וב באמצע¶
לפעמים אתם מריצים משהו בחזית ומבינים שאתם רוצים להעביר אותו לרקע. הפתרון הוא ללחוץ על Ctrl+Z. זה לא הורג את התהליך, אלא רק משהה אותו (suspend) ומחזיר לכם את השליטה בטרמינל.
חוזרים לפורגראונד ולבקגראונד¶
ברגע שיש לכם ג'וב מושהה, יש שתי פקודות עיקריות:
- fg - מחזירה את הג'וב האחרון לחזית, כאילו לא הפרעתם לו מעולם.
- bg - ממשיכה את הג'וב המושהה, אבל ברקע, כך שהוא ימשיך לרוץ בלי לתפוס לכם את הטרמינל.
אם יש לכם כמה ג'ובים במקביל, אפשר לציין באיזה מהם מדובר לפי המספר: fg %2 יחזיר לחזית את הג'וב עם המספר 2.
מה קורה כשסוגרים את הטרמינל¶
זו נקודה שמבלבלת הרבה אנשים. כברירת מחדל, כשאתם סוגרים את הטרמינל, כל הג'ובים שרצים ברקע מקבלים אות סיום ונהרגים ביחד איתו. אם אתם רוצים שתהליך ימשיך לרוץ גם אחרי שסגרתם את הטרמינל, יש שתי אפשרויות עיקריות:
- nohup - מריצים את הפקודה עם
nohup command &כדי שהיא תתעלם מאות הניתוק שנשלח בסגירת הטרמינל. - disown - אחרי שהרצתם ג'וב ברקע, אפשר להשתמש בפקודה
disownכדי "לנתק" אותו מהשל הנוכחי לגמרי.
לפרויקטים ארוכי טווח, כמו הרצת שרת לבדיקות, כלים כמו screen או tmux נותנים פתרון עוד יותר חזק - הם יוצרים סשן שלם שממשיך לרוץ ברקע גם אחרי שהתנתקתם מהמחשב לגמרי, ואפשר לחזור אליו מאוחר יותר.
למה זה שווה ללמוד¶
ברגע שתתרגלו לעבוד עם ג'ובים, תגלו שהטרמינל שלכם הופך להרבה יותר יעיל. במקום לחכות בכל פעם או לפתוח עשרות חלונות, אתם מנהלים כמה תהליכים במקביל בחלון אחד, מעבירים אותם קדימה ואחורה, ועובדים בצורה הרבה יותר זורמת. זה בדיוק סוג הדברים הקטנים שמבדילים בין מישהו שרק "מכיר פקודות לינוקס" לבין מישהו שבאמת עובד בטרמינל בנוחות.
אם אתם רוצים ללמוד את כל היסודות של לינוקס בצורה מסודרת, מהתקנה ועד עבודה יומיומית בטרמינל, יש לנו קורס שלם וחינמי בנושא: קורס לינוקס בסיסי.
יש לכם שאלה באמצע התרגול, או שנתקעתם על פקודה שלא מתנהגת כמו שציפיתם? בואו לדבר איתנו על זה.