Le super tips de la commande fg : quand Ctrl+Z sauve votre session terminal
شائع شدہ: 18 April 2026
- مشكلہ: ایک مصروف ٹرمینل
- تین ضروری کامینڈز
- سيناريو 1 : لمبي بنائید
- سینیریو 2 : بھولا ہوا ایڈیٹر
- سيناريو 3: عملية opencode معلقہ
- سيناريو 4 : ایک ساتھ چند جوبز کو منیج کرنا
- fg, bg, Ctrl+Z, Ctrl+C اور & کے درمیان فرق
- إیک جاب کا مکمل حیاتی دور
- پیشگی نکات
- عام فخوں اور غلتیاں
- خلاصہ ڈائگرام
- fg کم تر کمیت کیوں ہے
- تکنیکی مذکرہ : سگنالات
- نتیجہ
- حوالہ جات
آپ ڈھکیل رہے ہیں`./gradlew build`، ٹرمینل 3 منٹ کے لیے مسدود ہے، اور آپ کو کسی اور کام کرنے کی ضرورت ہے انتیظار کرتے ہوئے؟ نیا ٹیب کھولنا ضروری نہیں ہے۔`Ctrl+Z`یہ پراسیس کو سسٹمنڈ کرتا ہے،`fg`یہ وہ جگہ لے آتا ہے جہاں آپ نے اسے چھوڑا تھا۔ یہ Unix کی سب سے قلیلَقدر tip ہے ایک ڈیویلیپر کے روزمرہ زندگی میں۔
مشكلہ: ایک مصروف ٹرمینل
ہر ڈویلپر نے اس حالت کا سامنا کیا ہے:
$ ./gradlew build
> Building...
ٹرمینل بلاک ہو گیا. اب آپ کوئی بھی کمانڈ ٹائپ نہیں کر سکتے. اور آپ کو ایک فائل دیکھنے اور ایک چلانے کی ضرورت ہے.git status, یا مشغول پورٹ کی جانچ کریں۔
@startuml skinparam backgroundColor #FEFEFE actor Développeur as dev participant "Terminal" as term participant "Gradle\n( processus )" as gradle dev -> term : ./gradlew build term -> gradle : Lance le build gradle -> term : Occupe le terminal\n(pas de prompt) dev -> term : veut taper une commande term --> dev : ❌ Terminal bloqué note right of dev Le développeur est paralysé pendant toute la durée du build end note @enduml
اکثر ڈویلپرز ایک نیو ٹرمنیل کھولتے ہیں۔ لیکن ایک زیادہ خوبصورت، تیزی سے اور نیٹیو حل موجود ہے: جوبز کی منیجمنٹ۔
تین ضروری کامینڈز
Ctrl+Z — متوقف کرنا (SIGTSTP)
`Ctrl+Z`سیگنال بھیجیں`SIGTSTP`امامی پروسیس تک. پروسیس ہےمعطل— نہیں مارا — اور ٹرمینل اپنی پرامپٹ پر واپس آ جاتا ہے.
$ ./gradlew build
> Building...
^Z
[1]+ Stoppé ./gradlew build
$
کچ بریکٹس میں عدد`[1]`ہےجوب نمبر. Le `+`یہ ڈفلٹ جوب ظاہر کرتا ہے۔
fg —اگے لانا
`fg`یہ معلقہ جاب کو سامنے لاتا ہے۔عمل بالکل وہی سے دوبارہ شروع ہوتا ہے جہاں وہ روک دیا گیا تھا۔
$ fg
./gradlew build
> Building... (reprend où il en était)
ایک مخصوص جاب نمبر :
$ fg %2
bg — پس منظر میں جاری رکھیں
`bg`پروسس کو ٹرمینل بلاک کیے بغیر دوبارہ شروع کریں. لمبی بنائیوں کے لیے ایدیل۔
$ bg
[1]+ ./gradlew build &
$
Le `&`آخر میں یہ مطلب ہے کہ پروسس بیک گراؤنڈ میں چل رہا ہے۔
jobs — شل کے جائزوں کی فہرست بنائیں
$ jobs
[1]- Stoppé vim README.md
[2]+ En cours ./gradlew build
@startuml skinparam backgroundColor #FEFEFE skinparam defaultFontName sans-serif state "Avant-plan\n(terminal bloqué)" as fg #LightCoral state "Suspendu\n(Ctrl+Z)" as stopped #LightYellow state "Arrière-plan\n(bg)" as bg_ #LightGreen [*] --> fg : Lance une commande fg --> stopped : Ctrl+Z\n(SIGTSTP) stopped --> fg : fg\nreprend en avant-plan stopped --> bg_ : bg\nreprend en arrière-plan bg_ --> fg : fg\nramène en avant-plan fg --> [*] : Commande terminée note right of stopped Le processus est figé mais _pas_ tué end note note left of bg_ Le terminal est libre le build continue end note @enduml
سيناريو 1 : لمبي بنائید
یہ استعمال کا سب سے عام مثال ہے۔ آپ گرائیڈل بِلڈ چلاتے ہیں، ٹرمنال مسدود ہو جاتا ہے، اور آپ کو کچھ اور کرنے کی ضرورت ہے۔
@startuml skinparam backgroundColor #FEFEFE autonumber actor Développeur as dev participant "Terminal" as term participant "Gradle" as gradle database "Etat\nprocessus" as state dev -> term : ./gradlew build term -> gradle : Lance le build gradle -> state : En cours (FG) dev -> term : Ctrl+Z term -> state : Suspendu (job [1]) term --> dev : Prompt libre $ dev -> term : git status term --> dev : working tree clean dev -> term : fg term -> state : Reprend (FG) gradle --> dev : Build réussi ✓ note right of state Le processus Gradle n'a jamais été tué Il reprend exactement où il s'était arrêté end note @enduml
ایک قدم کے بعد ایک قدم
$ ./gradlew build
> Building...
^Z
[1]+ Stoppé ./gradlew build
$ git status
On branch main
nothing to commit, working tree clean
$ fg
./gradlew build
> Building...
BUILD SUCCESSFUL in 2m 34s
سینیریو 2 : بھولا ہوا ایڈیٹر
آپ میں ہیں`vim`, آپ کو کسی اور فائل کو sans چھوڑ کر دیکھنے کی ضرورت ہے`vim`.
# Dans vim, en mode commande :
:shell
$ cat /path/to/other/file.txt
$ exit
# Retour dans vim
لیکن یہ بھاری ہے. ساتھ`Ctrl+Z`, یہ فوری ہے :
# Dans vim, n'importe quel moment :
Ctrl+Z
[1]+ Stoppé vim README.md
$ cat /path/to/other/file.txt
# ... lire le fichier ...
$ fg
vim README.md
# Retour exact là où on en était, curseur en place
@startuml skinparam backgroundColor #FEFEFE autonumber actor Développeur as dev participant "vim" as vim participant "Shell" as shell dev -> vim : édition en cours dev -> vim : Ctrl+Z vim -> shell : Suspendu (job [1]) dev -> shell : cat autre_fichier.txt shell --> dev : contenu du fichier dev -> shell : fg shell -> vim : Reprend (job [1]) vim --> dev : Curseur exactement\nà la même position note right of vim vim restaure intégralement l'état : position du curseur, buffer, undo stack end note @enduml
(Translation of empty French string is empty Urdu string, so output is nothing)`vim`بحالی کرتا ہے مکمل طور پر وس کی حالت بعد ایک`fg`کرسر کی جگہ، بفر کا مواد، انقلوب کی تاریخ — سب کچھ محفوظ ہے۔
سيناريو 3: عملية opencode معلقہ
یہ وہ سيناريو ہے جس نے اس مضافے کو محفز کیا۔ آپ استعمال کر رہے ہیں`opencode`(CLI ٹول آپ کے کوڈ پر LLM کو کنٹرول کرنے کے لیے), اور پروسس متوقف ہے۔
@startuml skinparam backgroundColor #FEFEFE skinparam defaultFontName sans-serif skinparam componentStyle rectangle actor Développeur as dev participant "opencode\n(LLM agent)" as agent participant "Shell" as shell participant "git" as git dev -> agent : Session active agent -> agent : Tour de parole\ndu LLM en cours note over agent Ctrl+Z arrive en plein milieu d'une analyse de code end note dev -> agent : Ctrl+Z agent -> shell : Suspendu (job [1]) dev -> git : git diff git --> dev : changements visibles dev -> shell : fg shell -> agent : Reprend (job [1]) agent --> dev : Reprend exactement\nl'analyse en cours note right of agent Aucune perte de contexte Le LLM reprend sa réponse exactement où il en était end note @enduml
$ opencode
# ... session en cours, LLM analyse le code ...
^Z
[1]+ Stoppé opencode
$ git diff HEAD~1
# vérifier les changements récents
$ fg
opencode
# Le LLM reprend là où il s'était arrêté
فائدہ دوگنا :
-
سیاق و سباق کا کوئی نقصان نہیں: LLM سیشن، بات چیت کا تاریخ، کھُلی ہوئی فائلیں — سب چیز محفوظ رکھی گئی
-
ریستارت نہیں: opencode کو دوبارہچلانے کی ضرورت نہیں، کنٹیکس کو دوبارہ لوڈ کرنے کی ضرورت نہیں، LLM کو masalah کو دوبارہ وضاحت کرنے کی ضرورت نہیں
سيناريو 4 : ایک ساتھ چند جوبز کو منیج کرنا
fg et `bg`وہ کئی متوقف پروسیسز میں سے مخصوص پروسیس کو نشانہ بنانے کے لیے جوب نمبر قبول کرتے ہیں۔
$ vim config.yml
^Z
[1]+ Stoppé vim config.yml
$ ./gradlew test
^Z
[2]+ Stoppé ./gradlew test
$ htop
^Z
[3]+ Stoppé htop
$ jobs
[1] Stoppé vim config.yml
[2]- Stoppé ./gradlew test
[3]+ Stoppé htop
$ fg %2
./gradlew test
# Le build reprend en avant-plan
$ bg %3
[3] htop &
# htop reprend en arrière-plan
@startuml
skinparam backgroundColor #FEFEFE
rectangle "Jobs suspendus" as jobs #LightYellow {
card "[1] vim config.yml" as j1
card "[2] ./gradlew test" as j2
card "[3] htop" as j3
}
rectangle "Actions" as actions #LightGreen {
card "fg %2\n→ avant-plan" as a1
card "bg %3\n→ arrière-plan" as a2
card "fg %1\n→ avant-plan" as a3
}
jobs --> actions : fg/bg + numéro de job
actions --> j2 : Reprend
actions --> j3 : En arrière-plan
note bottom of jobs
Chaque job conserve
son état exact
entre les suspend/resume
end note
@enduml
جوبز کے کمانڈز کا خلاصہ
| حکم | اثر | مثال |
|---|---|---|
|
سامنے کے پروسس کو معلاق کرو |
بھیجنا کا`SIGTSTP` |
|
ڈیفالٹ جاب کو فورگراؤنڈ میں دوبارہ لاؤ |
|
|
کام n کو سامنے میں دوبارہ شروع کیا جاتا ہے |
|
|
یہ پیشفرض کام پسزمینی میں دوبارہ شروع کرتا ہے |
|
|
نوکری n کو پیشزمینہ میں جاری رکھیں |
|
|
موجودہ شیل کے جابس کی فہرست بنائیں |
|
|
ن کا کام مکمل کریں |
|
fg, bg, Ctrl+Z, Ctrl+C اور & کے درمیان فرق
بہت سی ڈویلپر ان میکانزمز کو ایک دوسرے سے خلط کر دیتے ہیں۔ یہ ایک فیصلہ سازی کرنے والی وضاحت ہے۔
@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultFontName sans-serif
rectangle "**Ctrl+Z**\nSIGTSTP" as ctrlz #LightYellow {
card "Suspend le processus\n(il est toujours en mémoire)\nUtilisable avec fg/bg" as c1
}
rectangle "**Ctrl+C**\nSIGINT" as ctrlc #LightCoral {
card "Tue le processus\n(pas de retour possible)\nPerte de tout l'état" as c2
}
rectangle "**& **\n(arrière-plan)" as ampersand #LightGreen {
card "Lance directement\nen arrière-plan\nTerminal libre immédiatement" as c3
}
rectangle "**fg**\n(foreground)" as fg_ #SkyBlue {
card "Ramène un job\nsuspendu en avant-plan\nTerminal occupé" as c4
}
rectangle "**bg**\n(background)" as bg_ #Lavender {
card "Reprend un job\nsuspendu en arrière-plan\nTerminal libre" as c5
}
ctrlz -right-> fg_ : fg pour reprendre
ctrlz -right-> bg_ : bg pour continuer\nen arrière-plan
ctrlc -right-> c2 : Pas de retour\nprocessus tué
note bottom of ctrlz
Le processus est **figé**
mais **pas tué**
end note
note bottom of ampersand
Alternative : lancer
./gradlew build &
directement en arrière-plan
end note
@enduml
| شورتکٹ/کمانڈ | سگنال | اثر | واپس جائیں؟ |
|---|---|---|---|
|
|
پروسیس روک دیں (جمد، memori mein) |
ہاں :`fg` ou |
|
|
پروسيس کو قتل کریں (مکمل) |
نہیں : پروسس تباہ شدہ |
|
|
پروسيس کو قتل کریں + کور ڈامپ |
نہ : عمل متلف |
|
— |
بیک گراؤنڈ میں مستقیم چلائیں |
`fg`اس کو آگے لانا |
Ctrl+Z`ہےغیر-تخrierte. عمل مکمل طور پر منجمد ہے، جیسا ہے، ذِخْرَہ میں۔ آپ فوراً دوبارہ شروع کر سکتے ہیں ساتھ`fg. یہ ایک pause ہے، ایک stop نہیں۔
|
إیک جاب کا مکمل حیاتی دور
@startuml skinparam backgroundColor #FEFEFE skinparam defaultFontName sans-serif title Cycle de vie complet d'un job shell state "Non existant" as none state "Avant-plan\n(occupe le terminal)" as foreground #LightCoral state "Suspendu\n(Ctrl+Z / SIGTSTP)" as suspended #LightYellow state "Arrière-plan\n(bg ou &)" as background #LightGreen state "Terminé\n(exit code 0)" as done #LightGray [*] --> none none --> foreground : tape une commande foreground --> suspended : Ctrl+Z foreground --> done : fin normale suspended --> foreground : fg suspended --> background : bg suspended --> done : kill %n background --> foreground : fg background --> done : fin normale\n(en arrière-plan) background --> suspended : Ctrl+Z\n(si fg puis Ctrl+Z) done --> [*] note right of suspended L'état suspendu est le pivot de tout le système de jobs end note @enduml
پیشگی نکات
fg سب سے حالیوں جوب اور تبدیلی کے ساتھ
fg`کسی استدلال کے بغیر مارک کردہ نوکری واپس لایا جاتا ہے+(سب سے تازہ). لیکن آپ بھی استعمال کر سکتے ہیں%-`پہلی نوکری ko هدف بنانے کے لیے :
$ vim file1.txt
^Z
[1]+ Stoppé vim file1.txt
$ vim file2.txt
^Z
[2]+ Stoppé vim file2.txt
$ fg # ramène job [2] (le plus récent)
$ fg %- # ramène job [1] (le précédent)
ایک نوکری کو صاف ستھرا کر ختم کرنا
$ jobs
[1]- Stoppé vim config.yml
[2]+ Stoppé ./gradlew test
$ kill %2 # envoie SIGTERM au job 2
$ kill -9 %1 # envoie SIGKILL au job 1 (force)
ڈساؤن : شیل سے الگ کرنا
disown`شل کی جوب ٹیبل سے ایک جوب ہٹا دیں۔ پروسیس چلتا رہتا ہے لیکن اب واپس نہیں لایا جا سکتا ساتھ`fg:
$ ./gradlew build &
[1] 12345
$ disown %1
# Le processus continue mais n'est plus lié au shell
# Ça survives à la fermeture du terminal
نہاپ کے ساتھ لمبی پروسیسوں کو ملائیں
ایک پروسیسر کے ٹرمینال کی بند ہونے پر زندہ رہنے کے لیے :
$ nohup ./gradlew build &
[1] 12345
$ disown %1
# Le build continue même si vous fermez le terminal
@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultFontName sans-serif
rectangle "fg" as fg_ #SkyBlue {
card "Ramène le job\nle plus récent (+)" as f1
card "Cible un job\nspécifique : fg %n" as f2
card "Alterne : fg %-" as f3
}
rectangle "kill %n" as kill_ #LightCoral {
card "SIGTERM (propre)" as k1
card "SIGKILL -9 (force)" as k2
}
rectangle "disown" as disown #Lavender {
card "Détache du shell\n(survit à la déconnexion)" as d1
}
rectangle "nohup + &" as nohup_ #LightGreen {
card "Processus immunisé\ncontre SIGHUP\n(survit à la fermeture\ndu terminal)" as n1
}
fg_ -right-> kill_ : si faut\nterminer
kill_ -right-> disown_ : ou détacher
nohup_ -left-> fg_ : fg ramène en\navant-plan
note bottom of disown_
Après disown, fg ne peut
plus ramener le job
end note
@enduml
عام فخوں اور غلتیاں
Ctrl+Z اور Ctrl+C کو غلطی سے ملا دینا
یہ سب سے اکثر ہونے والی غلطی ہے.`Ctrl+C`یہ عمل کو قتل کرتا ہے۔`Ctrl+Z`اس کو سست کرتا ہے۔ اگر آپ دباؤ دیتے ہیں`Ctrl+C`عکس کے طور پر، ساری حالت ضائع ہو جاتی ہے — کھولے گئے فائلز، LLM سیشنز، جاری بنڈنگ۔
@startuml
skinparam backgroundColor #FEFEFE
rectangle "Ctrl+Z (SIGTSTP)" as z #LightGreen {
card "میموری میں منجمد عمل (Process)" as z1
card "fg اسے مکمل طور پر واپس لاتا ہے" as z2
card "کوئی نقصان نہیں" as z3
}
rectangle "Ctrl+C (SIGINT)" as c #LightCoral {
card "عمل ختم ہو گیا" as c1
card "حالت مستقل طور پر ضائع ہو گئی" as c2
card "واپسی ممکن نہیں" as c3
}
note bottom of z
توقف → دوبارہ شروع کریں
end note
note bottom of c
Kill → Perdu
end note
@enduml
جوبز شیل میں مقامی ہیں
jobs, fg et `bg`وہ صرف اسی شیل میں کام کرتے ہیں جس نے ان پروسیسز کو چلایا ہے۔ اگر آپ نया ٹرمینل کھولیں گے تو آپ دوسرے کے جوبز نہیں دیکھ پائیں گے۔
# Terminal 1
$ vim file.txt
^Z
[1]+ Stoppé vim file.txt
# Terminal 2 (nouveau)
$ jobs
# (rien — les jobs sont locaux au shell)
سیسٹم وسیع پروسیز دیکھنے کے لیے استعمال کریں`ps` ou htop:
ps aux | grep vim
جوبز شیل کے بند ہونے پر بقی نہیں رہتے
اگر آپ ٹرمنل بند کر دیں، تو تمام سسپینڈ یا بیک گراؤنڈ جابس مٹا دیے جاتے ہیں۔ ایک پروسس کے بچنے کے لیے استعمال کریں`nohup`+disown :
$ nohup ./gradlew build &
[1] 12345
$ disown %1
# Fermer le terminal → le build continue
انٹرایکٹو پروسیسز اور fg
کچھ تعاملی پروگرام ایک کے بعد اچھی طرح سے کام نہیں کرتے`Ctrl+Z`+fg. یہ کم ہوتا ہے، لیکن ہوتا ہے:
-
کسی پروگرام جو سیگنالات استعمال کرتے ہیں (vim, htop, less) اچھی طرح سے کام کرتے ہیں`Ctrl+Z`)
-
لمبی مدت تک چلنے والے نیٹ ورک کے پروگرام (ssh, opencode) عام طور پر درست انداز سے بازیاب ہو جاتے ہیں
-
جیسے پروگرام جو ٹرمینل کو تبدیل کرتے ہیں (ncurses) گاهی ٹرمینل کو غیر متوقع حالت میں چھوڑ دیتے ہیں
کروپٹ ٹرمینل کے بعد ایک`fg`, ٹائپ کریں :
reset
خلاصہ ڈائگرام
@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultFontName sans-serif
skinparam ArrowColor #444444
title "fg` — وہ ٹپ جو سب کچھ بدل دے"
rectangle "**مسئلہ**" as problem #LightCoral {
card "ٹرمینل کسی پروسیس کی وجہ سے\nبلاک ہو گیا" as p1
card "نیا ٹرمینل کھولنا = مشکل حل" as p2
}
rectangle "**حل**" as solution #LightGreen {
card "Ctrl+Z → معطل (suspend) کرتا ہے" as s1
card "`fg` → دوبارہ شروع کرتا ہے" as s2
card "`bg` → پس منظر (background) میں بھیجتا ہے" as s3
card "`jobs` → معطل پروسیسز کو دیکھنا" as s4
}
rectangle "**فوائد**" as advantages #SkyBlue {
card "سیاق و سباق (context) کا کوئی نقصان نہیں" as a1
card "دوبارہ شروع کرنے کی ضرورت نہیں" as a2
card "ایک ہی ٹرمینل کافی ہے" as a3
}
problem -right-> solution : "40 سال پرانا\nنیٹیو Unix حل"
solution -right-> advantages : "نتیجہ"
note bottom of advantages
fg کوئی مبہم ٹپ نہیں ہے
یہ ایک بنیادی میکانزم ہے
Unix shell کا
end note
@enduml
fg کم تر کمیت کیوں ہے
بیشتر مودرن ڈویلپرز کھوجتے ہیں`fg`دیر، یا کبھی نہیں۔ کئی دلائل:
-
IDE ٹرمینال چھپتے ہیںVS Code ایک انٹیگریٹڈ ٹرمینل پیش کرتا ہے، لیکن متعدد ٹابس بناتے ہیں`fg`ظاہراً کم ضروری
-
گرافیکی اوزار سی ایل آئی کی جگہ لے رہے ہیں: فائلز کے منیجرز، نظام کے مانیٹرز، گِٹ کے گرافیک کلائنٹس
-
tmux اور screenyah multiplexers یکساں masalah مختلف طریقے سے حل کرتے ہیں،磁器`fg`یہ آسان ہے اور ہمیشہ قابل دستیاب ہے
تاهم,`fg`ہے :
-
عالمیPOSIX شیلز (bash, zsh, fish…) میں موجود
-
غیر وابستہ: انسٹال کرنے کی ضرورت نہیں tmux یا screen
-
سنسپیشوٹ: دو ضربات`Ctrl+Z`پھر`fg`)متوقف کرنے اور دوبارہ شروع کرنے کے لیے
-
سیاق و سباق کا محافظ: عمل کی حالت سالم ہے
@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultFontName sans-serif
rectangle "fg کو\nکم کیوں سمجھا جاتا ہے؟" as why #LightCoral {
card "ملٹی ٹیب ٹرمینل کے ساتھ\nIDE" as w1
card "گرافیکل ٹولز\nجو CLI کی جگہ لیتے ہیں" as w2
card "tmux/screen\nاس مسئلے کو\nدوسرے طریقے سے حل کرتے ہیں" as w3
}
rectangle "fg کیوں\nبہتر ہے؟" as superior #LightGreen {
card "آفاقی: bash,\nzsh, fish, sh..." as s1
card "بغیر کسی انحصار کے:\nکسی انسٹالیشن کی ضرورت نہیں" as s2
card "صرف دو کیز:\nCtrl+Z پھر fg" as s3
card "سیاق و سباق محفوظ:\nاسٹیٹ کا صفر نقصان" as s4
}
why -right-> superior : "سادگی\nہمیشہ جیتتی ہے"
@enduml
تکنیکی مذکرہ : سگنالات
مُتَجَسِّسوں کے لیے، یہ شامل سیگنالز :
| اشارہ | نام | بجائے بھیجا گیا | اثر |
|---|---|---|---|
2 |
|
|
انقطاع — عمل کو ختم کرتا ہے |
3 |
|
|
کور ڈمپ کے ساتھ خروج |
18 |
|
|
مفاعلی سٹاپ — عمل روک دیں |
19 |
|
|
جاری رکھے — متوقف عمل کو دوبارہ شروع کرتا ہے |
15 |
|
|
صاف اختتام |
9 |
|
|
مجبور خاتمہ (روکنا ناممکن) |
مکمل فلو :
@startuml skinparam backgroundColor #FEFEFE skinparam defaultFontName sans-serif participant "صارف" as user participant "شیل" as shell participant "عمل (Processus)" as proc user -> shell : Ctrl+Z shell -> proc : SIGTSTP (signal 18) note right of proc : میموری میں منجمد عمل user -> shell : fg shell -> proc : SIGCONT (signal 19) note right of proc : پراسیس دوبارہ\nفور گراؤنڈ میں شروع ہو رہا ہے user -> shell : bg shell -> proc : SIGCONT (signal 19) note right of proc : عملیہ پس منظر میں دوبارہ شروع ہو رہا ہے user -> shell : Ctrl+C shell -> proc : SIGINT (signal 2) note right of proc : عملکرد مکمل\nحالت ضائع ہوگئی @enduml
نتیجہ
`fg`یہ ایک مخفی tips نہیں — یہ یونیکس شیل کا بنیادی مکانیزم ہے، 1970 کے سالوں سے دستیاب ہے۔ حقیقت یہ کہ زیادہ تر ڈویلپر اسے نظرانداز کر رہے ہیں، ہماری دور کا ایک علامت ہے: IDE اور multiplexers نے ہمیں بنیادیوں سے door کر دیا۔
لیکن جب آپ ایک SSH سرور پر ہیں، ایک کم از کم ٹرمینل میں، یا صرف استعمال کر رہے ہیں`opencode`اور اس لئے LLM مکمل طور پر کام کر رہا ہے —Ctrl+Z, fg, bg, `jobs`آپ کے بہترین دوست ہیں
_ Ctrl+Z suspend, fg resume. یہ ٹرمینل کی pause-play ہے۔ _
حوالہ جات
-
man bash— بخش JOB CONTROL -
man signal— POSIX سیGNالہ کی فہرست