यह नौकरी के नियंत्रण के साथ किसी भी शेल का सच होना चाहिए, जो (अधिकांश भाग के लिए) आप तब तक के लिए ले जा सकते हैं जब तक कि वास्तव में प्राचीन शेल के साथ काम न करें। यह POSIX मानक में है , इसलिए यहां तक कि dash
नौकरी पर नियंत्रण का समर्थन करता है (जब अंतःक्रियात्मक रूप से या साथ चलाया जाता है -m
)।
इंटरएक्टिव
- Ctrl+ zवर्तमान में अग्रभूमि कार्यक्रम को निलंबित कर देगा
bg
सबसे हाल ही में निलंबित कार्यक्रम की पृष्ठभूमि
( bg %2
नौकरी नंबर के साथ उपयोग करें , जिसे आप देख सकते हैं jobs
)
fg
सबसे हाल ही में निलंबित कार्यक्रम को अग्रसर करेगा
में zsh
, आप एक fg
और Ctrl+ के माध्यम से शीघ्र से चलाने के लिए एक महत्वपूर्ण बंधन लिख सकते हैं z:
_zsh_cli_fg() { fg; }
zle -N _zsh_cli_fg
bindkey '^Z' _zsh_cli_fg
वहाँ भी शायद एक चतुर तरीका है bg
पर शक करने के लिए चलाने के लिए , लेकिन यह नासमझ लगता है; कम से कम मेरे लिए, मेरी के बहुमत Ctrl+ zउपयोग वजह से है Ctrl+ cबाहर तोड़ विफल हो रहा है; मैं kill %1
इसके बजाय उदाहरण के साथ पालन करना चाहता हूं bg
, और मैं निश्चित रूप से हत्या करने के लिए डिफ़ॉल्ट नहीं करना चाहता हूं! (यह तर्क इस बात पर भी विस्तार करता है कि मैं अब इस कुंजी बंधन का उपयोग क्यों नहीं करता: यदि मैं एक प्रक्रिया को रोकने के लिए Ctrl+ पर हथौड़ा मार रहा हूं z, तो आखिरी चीज जो मैं करना चाहता हूं, वह फिर से शुरू है!)
गैर-इंटरैक्टिव
यदि आप एक अलग शेल इंस्टेंस (या कभी-कभी sudo
कमांड सहित एक अलग उपयोगकर्ता ) में हैं, तो आप संभवतः जॉब नंबरों का उपयोग नहीं कर पाएंगे।
एक बार जब आप इसकी प्रक्रिया आईडी (पीआईडी) जान लेंगे तो आप दूसरी प्रक्रिया पर भी काम कर सकते हैं। आप पीआईडी प्राप्त कर सकते हैं pgrep …
, या ps aux |grep …
(या उसी शेल से jobs -l
, या $!
) और आप फिर चला सकते हैं:
kill -STOP $PID # suspend
kill -CONT $PID # continue (resume)
यदि आप प्रक्रिया आईडी नहीं जानते हैं और नाम से प्रक्रिया के अन्य उदाहरणों को निलंबित करने के बारे में चिंतित नहीं हैं, तो आप इनमें से किसी एक को सिग्नल पास कर सकते हैं:
killall -STOP program_name
pkill -STOP program_name
pkill -f -STOP program_name_or_args
एक CONT
कार्यक्रम के लिए एक संकेत Ctrl+ z(और नहीं bg
'डी) के साथ बंद कर दिया अपनी प्रगति (अग्रभूमि में) फिर से शुरू करेंगे, जैसे कि आप इसके लिए थे fg
।
पुन: मानक त्रुटि
इस सवाल का संपादन मानक त्रुटि के बारे में पूछता है:
प्रक्रिया stderr को आउटपुट करती है, इसलिए मैं fg <jobid>
टर्मिनल को आउटपुट करते समय कमांड कैसे जारी कर सकता हूं ?
जब तक प्रश्न में नौकरी में ऐसे घटक होते हैं जो पृष्ठभूमि में होते हैं (या पूरी नौकरी पृष्ठभूमि में होती है, शायद के माध्यम से kill -CONT
), तो आपको निलंबित होने के दौरान वास्तव में आउटपुट नहीं देखना चाहिए।
यदि यह अभी भी डेटा आउटपुट कर रहा है (मानक आउटपुट या मानक त्रुटि के रूप में), तो यह निश्चित रूप से आपके टर्मिनल को नेत्रहीन बना देगा, लेकिन उस सभी आउटपुट को अनदेखा कर दिया जाएगा क्योंकि यह आपके इनपुट का हिस्सा नहीं है। इससे यह जानना कठिन हो सकता है कि आपने कोई टाइपोस दर्ज नहीं किया है, लेकिन (आँख बंद करके) टाइपिंग fg
Enterपर्याप्त होनी चाहिए (जब तक कि आपके पास कई काम न हों और सवाल का जवाब सबसे हाल का न हो, उस स्थिति में आपको वास्तव में नौकरी के विवरण की आवश्यकता होगी )।
यदि आपको नौकरी का विवरण खोजने की आवश्यकता है, तो STOP
ऊपर गैर-संवादात्मक तरीकों के माध्यम से संकेत भेजने के लिए दूसरे टर्मिनल का उपयोग करें । यह ऊपर अपने प्रदर्शन मुक्त कर देना चाहिए (शायद मारा Enterकई बार या चलाने clear
या Ctrl+ L) ताकि आप तो चला सकते हैं jobs
काम वर्णनकर्ता को खोजने के लिए और फिर से चलाने fg %N
जहां N
कि संख्या है।