Table des matières
पढ़ने का समय : 10 minutes

आप फेंकते हैं`./gradlew build`, टर्मिनल 3 मिनट के लिए ब्लॉक किया गया है, और आपको कुछ और करने की आवश्यकता है en attendant ? नए टैब खोलने की आवश्यकता नहीं है.`Ctrl+Z`प्रक्रिया को सस्पेंड करें`fg`इसे बिल्कुल वहीं लाया जाता है जहाँ आपने उसे छोड़ा था। यह डेवलपर के दैनिक जीवन का सबसे कम आंका जाने वाला यूनिक्स टिप है।

सामग्री की तालिका

[]

समस्या : एक व्यस्त टर्मिनल

हर डेवलपर ने इस स्थिति को अनुभव किया है:

$ ./gradlew build
> Building...

और आपको एक फ़ाइल देखनी है, एक लॉन्च करना है`git status`, या एक व्यस्त पोर्ट की जांच करें।

Failed to generate image: PlantUML preprocessing failed: [From <input> (line 6) ]

@startuml
skinparam backgroundColor #FEFEFE

actor Développeur as dev
participant "टर्मिनल" as term
participant "Gradle
^^^^^
 Syntax Error? (Assumed diagram type: sequence)

@startuml
skinparam backgroundColor #FEFEFE

actor Développeur as dev
participant "टर्मिनल" as term
participant "Gradle
( प्रक्रिया )" 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]` est le जॉब नंबर. 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
Failed to generate image: PlantUML preprocessing failed: [From <input> (line 6) ]

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultFontName sans-serif

state "अग्रभूमि\n(ब्लॉक्ड टर्मिनल)" as fg #LightCoral
state "निलंबित
^^^^^
 Syntax Error? (Assumed diagram type: state)

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultFontName sans-serif

state "अग्रभूमि\n(ब्लॉक्ड टर्मिनल)" as fg #LightCoral
state "निलंबित
(Ctrl+Z)" as stopped #LightYellow
state "पृष्ठभूमि\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 : लंबा बिल्ड

यह सबसे सामान्य उपयोग का मामला है। आप एक Gradle बिल्ड शुरू करते हैं, टर्मिनल ब्लॉक हो जाता है, और आपको कुछ अन्य करने की आवश्यकता होती है।

Failed to generate image: PlantUML preprocessing failed: [From <input> (line 8) ]

@startuml
skinparam backgroundColor #FEFEFE
autonumber

actor Développeur as dev
participant "टर्मिनल" as term
participant "Gradle" as gradle
database "स्थिति
^^^^^
 Syntax Error? (Assumed diagram type: sequence)

@startuml
skinparam backgroundColor #FEFEFE
autonumber

actor Développeur as dev
participant "टर्मिनल" as term
participant "Gradle" as gradle
database "स्थिति
प्रक्रिया" 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`, आपको किसी अन्य फ़ाइल को देखना है बिना बाहर निकले`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
vim suspend

</think> (No output)vim`यह अपनी स्थिति को पूरी तरह से बहाल करता है एक`fg: कर्सर की स्थिति, बफ़र की सामग्री, अनडू इतिहास — सब कुछ संरक्षित है.

परिदृश्य 3: opencode प्रक्रिया निलंबित

यह वह परिदृश्य है जिसने इस लेख को प्रेरित किया। आप उपयोग कर रहे हैं`opencode`(CLI टूल आपके कोड पर एक LLM को नियंत्रित करने के लिए), और प्रक्रिया निलंबित है।

Failed to generate image: PlantUML preprocessing failed: [From <input> (line 7) ]

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultFontName sans-serif
skinparam componentStyle rectangle

actor Développeur as dev
participant "opencode
^^^^^
 Syntax Error? (Assumed diagram type: sequence)

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultFontName sans-serif
skinparam componentStyle rectangle

actor Développeur as dev
participant "opencode
(LLM एजेंट)" as agent
participant "शेल" as shell
participant "गिट" 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é

फ़ायदा दोगुना है :

  1. कोई संदर्भ हानि नहींLLM सत्र, वार्तालाप का इतिहास, खुले फ़ाइलें — सब कुछ संरक्षित है

  2. रीबूट नहीं: opencode को पुनः प्रारंभ करने की आवश्यकता नहीं है, संदर्भ को पुनः लोड करने की आवश्यकता नहीं है, LLM को समस्या की पुनः व्याख्या करने की आवश्यकता नहीं है

परिदृश्य 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
multiple jobs

कार्यों के आदेशों का सारांश

आदेश प्रभाव उदाहरण

Ctrl+Z

प्रक्रिया को अग्रभूमि में निलंबित करें

भेजने का`SIGTSTP`

fg

डिफ़ॉल्ट जॉब को फ़ोरग्राउंड में फिर से शुरू करें

fg ou fg %1

fg %n

जॉब अग्रभूमि में फिर से शुरू करता है

fg %2

bg

डिफ़ॉल्ट जॉब को पृष्ठभूमि में फिर से शुरू करें

bg ou bg %1

bg %n

न के जॉब को पृष्ठभूमि में फिर से शुरू करें

bg %2

jobs

वर्तमान शेल के कार्यों की सूची बनाएँ

jobs -l(PID के साथ)

kill %n

job completo करो n

kill %2

fg, bg, Ctrl+Z, Ctrl+C और & के अंतर

बहुत से डेवलपर्स इन तंत्रों को भ्रमित करते हैं। यहाँ एक निर्णायक स्पष्टीकरण दिया गया है।

Failed to generate image: PlantUML preprocessing failed: [From <input> (line 7) ]

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultFontName sans-serif

rectangle "**Ctrl+Z**\nSIGTSTP" as ctrlz #LightYellow {
  card "प्रक्रिया को निलंबित करें
(यह अभी भी मेमोरी में है)
^^^^^
 Syntax Error? (Assumed diagram type: activity)

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultFontName sans-serif

rectangle "**Ctrl+Z**\nSIGTSTP" as ctrlz #LightYellow {
  card "प्रक्रिया को निलंबित करें
(यह अभी भी मेमोरी में है)
fg/bg के साथ उपयोग करने योग्य" as c1
}

rectangle "**Ctrl+C**\nSIGINT" as ctrlc #LightCoral {
  card "प्रक्रिया को मारें
(वापसी संभव नहीं)
सभी स्थिति की हानि" as c2
}

rectangle "**& **\n(पृष्ठभूमि)" as ampersand #LightGreen {
  card "सीधे लॉन्च करें
पृष्ठभूमि में
तुरंत मुक्त टर्मिनल" as c3
}

rectangle "**fg**\n(अग्रभूमि)" as fg_ #SkyBlue {
  card "एक जॉब लाओ
फॉरग्राउंड में सस्पेंडेड
टर्मिनल व्यस्त" as c4
}

rectangle "**bg**\n(पृष्ठभूमि)" as bg_ #Lavender {
  card "एक काम फिर से शुरू
पृष्ठभूमि में निलंबित
मुक्त टर्मिनल" 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
शॉर्टकट/कमांड सिग्नल प्रभाव वापस लौटना?

Ctrl+Z

SIGTSTP

प्रक्रिया को निलंबित करें (जमा, मेमोरी में)

हाँ :`fg` ou bg

Ctrl+C

SIGINT

प्रक्रिया को मारें (समाप्त)

नहीं: नष्ट प्रक्रिया

Ctrl+\

SIGQUIT

प्रक्रिया मारो + core dump

नहीं : नष्ट प्रक्रिया

commande &

(No output)

बैकग्राउंड में सीधे लॉन्च करें

`fg`इसे सामने लाने के लिए

Ctrl+Z`JBake संदर्भ (यह सामग्री JBake टेम्प्लेट और कन्वेंशन का उपयोग करती है): # JBake CLI कमांड `` # Initialize a new JBake project jbake -i

Bake (generate) the site jbake -b

Bake and serve locally jbake -b -s

Bake and watch for changes jbake -b --reset

Specify source and destination jbake source_folder output_folder

Clear the output directory before baking jbake -b . output --resetगैर-विध्वंसक# JBake CLI Commands ` # Initialize a new JBake project jbake -i

Bake (generate) the site jbake -b

Bake and serve locally jbake -b -s

Bake and watch for changes jbake -b --reset

Specify source and destination jbake source_folder output_folder

Clear the output directory before baking jbake -b . output --reset `

fr से hi में अनुवाद करें सभी बैकटिक कोड स्पैन (…​) को बिल्कुल वैसा ही रखें — बैकटिक की सामग्री, स्पेसिंग, या स्थिति कभी न बदलें। यह पाठ बड़े वाक्य का एक अंश हो सकता है — अंश का अनुवाद अधिक संदर्भ मांगे बिना करें। केवल अनुवादित पाठ आउटपुट करें — कोई स्पष्टीकरण, कोई टिप्पणी, कोई परिचय, कोई विकल्प, कोई विकल्प नहीं।

  1. प्रक्रिया स्मृति में वैसे ही स्थिर है। आप तुरंत इसे जारी रख सकते हैं`fg`. यह एक pause है, एक stop नहीं.

एक जॉब का पूरा जीवन चक्र

Failed to generate image: PlantUML preprocessing failed: [From <input> (line 7) ]

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultFontName sans-serif

title शेल जॉब का पूर्ण जीवन चक्र
state "अस्तित्वहीन" as none
state "अग्रभूमि
^^^^^
 Syntax Error? (Assumed diagram type: state)

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultFontName sans-serif

title शेल जॉब का पूर्ण जीवन चक्र
state "अस्तित्वहीन" as none
state "अग्रभूमि
(टर्मिनल को घेरता है)" as foreground #LightCoral
state "निलंबित\n(Ctrl+Z / SIGTSTP)" as suspended #LightYellow
state "पृष्ठभूमि\n(bgまたは &)" as background #LightGreen
state "समाप्त
(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`कोई तर्क नहीं होने पर चिह्नित काम लौटाता है+(सबसे हालिया). लेकिन आप भी इसका उपयोग कर सकते हैं%-`पिछले जॉब को लक्ष्य करने के लिए :

$ 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)

désown : शेल से अलग करें

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 के साथ मिलाएँ लंबी प्रक्रियाओं के लिए

एक प्रक्रिया टर्मिनल बंद होने के बाद भी जीवित रहने के लिए :

$ nohup ./gradlew build &
[1] 12345
$ disown %1
# Le build continue même si vous fermez le terminal
Failed to generate image: PlantUML preprocessing failed: [From <input> (line 7) ]

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultFontName sans-serif

rectangle "fg" as fg_ #SkyBlue {
  card "जॉब लाओ
सबसे हाल का (+)" as f1
^^^^^
 Syntax Error? (Assumed diagram type: activity)

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultFontName sans-serif

rectangle "fg" as fg_ #SkyBlue {
  card "जॉब लाओ
सबसे हाल का (+)" as f1
  card "एक नौकरी को लक्ष्य बनाएँ
विशिष्ट : fg %n" as f2
  card "बदलें : fg %-" as f3
}

rectangle "मारो %n" as kill_ #LightCoral {
  card "SIGTERM (स्वच्छ)" as k1
  card "SIGKILL -9 (बल)" as k2
}

rectangle "इन्कार करना" as disown #Lavender {
  card "शेल से अलग करें\n(डिस्कनेक्शन के दौरान जीवित रहता है)" as d1
}

rectangle "nohup + &" as nohup_ #LightGreen {
  card "इम्यूनाइज़्ड प्रक्रिया
SIGHUP के खिलाफ
(टर्मिनल के बंद होने पर जीवित रहता है)" 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`reflex से, पूरी स्थिति खो जाती है — खुले फ़ाइलें, LLM सत्र, चल रहे बिल्ड।

ctrlz vs ctrlc

जॉब्स शेल के लिए स्थानीय होते हैं

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

सारांश आरेख

Failed to generate image: PlantUML preprocessing failed: [From <input> (line 10) ]

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultFontName sans-serif
skinparam ArrowColor #444444

title "fg — टिप्स जो सब कुछ बदल देते हैं"

rectangle "**समस्या**" as problem #LightCoral {
  card "टर्मिनल अवरुद्ध
एक प्रक्रिया द्वारा" as p1
^^^^^
 Syntax Error? (Assumed diagram type: activity)

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultFontName sans-serif
skinparam ArrowColor #444444

title "fg — टिप्स जो सब कुछ बदल देते हैं"

rectangle "**समस्या**" as problem #LightCoral {
  card "टर्मिनल अवरुद्ध
एक प्रक्रिया द्वारा" as p1
  card "नया\nटर्मिनल खोलना = भारी समाधान" as p2
}

rectangle "समाधान" as solution #LightGreen {
  card "Ctrl+Z → निलंबित" as s1
  card "fg → फिर से शुरू करता है" as s2
  card "bg → पृष्ठभूमि में" as s3
  card "jobs → voir les suspendus" as s4
}

rectangle "**लाभ**" as advantages #SkyBlue {
  card "संदर्भ की हानि नहीं" as a1
  card "रीस्टार्ट नहीं" as a2
  card "एक टर्मिनल पर्याप्त है" as a3
}

problem -right-> solution : "Unix का स्वाभाविक समाधान 40 वर्षों से"
solution -right-> advantages : "परिणाम"

note bottom of advantages
  fg n'est pas un tips obscur
  C'est un mécanisme fondamental
  du shell Unix
end note
@enduml

fg क्यों कम आंका गया

अधिकांश आधुनिक डेवलपर्स खोजते हैं`fg`देर से, या कभी नहीं। कुछ कारण :

  1. IDE टर्मिनल छुपाते हैं: VS Code एक इंटीग्रेटेड टर्मिनल प्रदान करता है, लेकिन कई टैब बनाते हैं`fg`दिखने में कम आवश्यक

  2. ग्राफ़िकल टूल्स CLI को प्रतिस्थापित करते हैं: फ़ाइल प्रबंधक, सिस्टम मॉनिटर, ग्राफ़िकल Git क्लाइंट

  3. tmux और स्क्रीन: ये मल्टीप्लेक्सर्स एक ही समस्या को अलग तरीके से हल करते हैं, लेकिन`fg`यह अधिक सरल और हमेशा उपलब्ध है

फिर भी,fg# JBake CLI Commands ` # Initialize a new JBake project jbake -i

Bake (generate) the site jbake -b

Bake and serve locally jbake -b -s

Bake and watch for changes jbake -b --reset

Specify source and destination jbake source_folder output_folder

Clear the output directory before baking jbake -b . output --reset ` है :

  1. सार्वभौमिकसभी POSIX शेल्स में मौजूद (bash, zsh, fish…​)

  2. निर्भरता के बिना: tmux या स्क्रीन इंस्टॉल करने की ज़रूरत नहीं

  3. तत्क्षणिक: दो हमले (Ctrl+Z`फिर`fg) रोकने और फिर से शुरू करने के लिए

  4. संदर्भ संरक्षक : l’état du processus est intact

Failed to generate image: PlantUML preprocessing failed: [From <input> (line 6) ]

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultFontName sans-serif

rectangle "fg है
कम आंका गया ?" as why #LightCoral {
^^^^^
 Syntax Error? (Assumed diagram type: activity)

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultFontName sans-serif

rectangle "fg है
कम आंका गया ?" as why #LightCoral {
  card "IDE के साथ टर्मिनल\nबहु-टैब" as w1
  card "ग्राफ़िकल उपकरण
जो CLI को बदलते हैं" as w2
  card "tmux/screen समस्या को अन्य तरीके से हल करते हैं" as w3
}

rectangle "क्यों fg है
बेहतर ?" as superior #LightGreen {
  card "सार्वत्रिक : bash,
zsh, fish, sh..." as s1
  card "निर्भरता रहित:\nइंस्टॉलेशन नहीं" as s2
  card "दो हमले:\nCtrl+Z फिर fg" as s3
  card "संरक्षित संदर्भ:
शून्य राज्य हानि" as s4
}

why -right-> superior : "सादगी
हमेशा जीतती है"
@enduml

तकनीकी ज्ञापन : संकेत

जिज्ञासु लोगों के लिए, यहाँ संलग्न संकेत हैं:

सिग्नल नाम भेजा गया प्रभाव

2

SIGINT

Ctrl+C

बाधा — प्रक्रिया समाप्त कर देती है

3

SIGQUIT

Ctrl+\

कोर डंप के साथ बाहर निकलता

18

SIGTSTP

Ctrl+Z

इंटरैक्टिव स्टॉप — प्रक्रिया को निलंबित करता है

19

SIGCONT

fg/bg

जारी रखें — एक निलंबित प्रक्रिया को फिर से शुरू करता है

15

SIGTERM

kill %n

स्वच्छ समापन

9

SIGKILL

kill -9 %n

जबरदस्त समाप्ति (इसे अवरोधित नहीं किया जा सकता)

पूर्ण प्रवाह:

signal flow

निष्कर्ष

`fg`यह एक अस्पष्ट सुझाव नहीं है — यह यूनिक्स शेल का एक मौलिक तंत्र है, जो 1970 के दशक से उपलब्ध है। अधिकांश डेवलपर्स द्वारा इसे अनदेखा करना हमारे युग का एक लक्षण है: IDE और मल्टीप्लेक्सर्स ने हमें मूल बातों से दूर कर दिया है।

लेकिन जब आप एक SSH सर्वर पर हैं, एक न्यूनतम टर्मिनल में हैं, या बस उपयोग कर रहे हैं`opencode`और LLM पूरी तरह से काम कर रहा है —Ctrl+Z, fg, bg, `jobs`हैं आपके सबसे अच्छे दोस्तों.

(No output) Ctrl+Z रोकता है, fg फिर से शुरू करता है। यह टर्मिनल की पॉज़‑प्ले है। (No output)

संबंधित लेख