मैं सर्वर पर एक nohup प्रक्रिया चला रहा हूँ। जब मैं इसे मारने की कोशिश करता हूं तो इसके बजाय मेरा पोटीन कंसोल बंद हो जाता है।
इस तरह से मैं प्रक्रिया आईडी खोजने की कोशिश करता हूं:
ps -ef |grep nohup
यह मारने की आज्ञा है
kill -9 1787 787
मैं सर्वर पर एक nohup प्रक्रिया चला रहा हूँ। जब मैं इसे मारने की कोशिश करता हूं तो इसके बजाय मेरा पोटीन कंसोल बंद हो जाता है।
इस तरह से मैं प्रक्रिया आईडी खोजने की कोशिश करता हूं:
ps -ef |grep nohup
यह मारने की आज्ञा है
kill -9 1787 787
जवाबों:
उपयोग करते समय nohup
और आप कार्य को पृष्ठभूमि में रखते हैं, पृष्ठभूमि ऑपरेटर ( &
) आपको कमांड प्रॉम्प्ट पर पीआईडी देगा। यदि आपकी योजना प्रक्रिया को मैन्युअल रूप से प्रबंधित करने की है, तो आप उस PID को सहेज सकते हैं और बाद में प्रक्रिया को मारने के लिए उपयोग कर सकते हैं यदि आवश्यक हो, तो ( kill PID
या kill -9 PID
यदि आपको मारने के लिए मजबूर करने की आवश्यकता है)। वैकल्पिक रूप से, आप पीआईडी को बाद में ढूंढ सकते हैं ps -ef | grep "command name"
और वहां से पीआईडी का पता लगा सकते हैं। ध्यान दें कि nohup
कीवर्ड / कमांड स्वयं ps
आउटपुट के लिए कमांड में दिखाई नहीं देता है ।
यदि आप एक स्क्रिप्ट का उपयोग करते हैं, तो आप कुछ ऐसा कर सकते हैं:
nohup my_command > my.log 2>&1 &
echo $! > save_pid.txt
यह my_command
सभी आउटपुट को my.log
एक स्क्रिप्ट में सहेज कर चलेगा (एक स्क्रिप्ट में $!
निष्पादित अंतिम प्रक्रिया के पीआईडी का प्रतिनिधित्व करता है)। 2
(मानक त्रुटि के लिए फ़ाइल की जानकारी देता है stderr
) और 2>&1
मानक आउटपुट (फ़ाइल वर्णनकर्ता के लिए रास्ते में मानक त्रुटि उत्पादन के लिए खोल बताता है 1
)। इसकी जरूरत है&1
है कि शेल जानता है कि यह उस संदर्भ में एक फ़ाइल विवरणक है जिसका नाम केवल एक फ़ाइल है 1
। 2>&1
किसी भी त्रुटि संदेश है कि सामान्य रूप से हमारे में मानक त्रुटि के लिए लिखा जाता कब्जा करने के लिए की जरूरत है my.log
फ़ाइल (जो मानक आउटपुट से आ रही है)। शेल के साथ I / O पुनर्निर्देशन को संभालने के बारे में अधिक जानकारी के लिए I / O पुनर्निर्देशन देखें ।
यदि आदेश एक नियमित आधार पर आउटपुट भेजता है, तो आप कभी-कभी आउटपुट की जांच कर सकते हैं tail my.log
, या यदि आप इसे "लाइव" का पालन करना चाहते हैं तो आप उपयोग कर सकते हैं tail -f my.log
। अंत में, यदि आपको इस प्रक्रिया को मारने की जरूरत है, तो आप इसे कर सकते हैं:
kill -9 `cat save_pid.txt`
rm save_pid.txt
nohup
प्रति नहीं है, जो पीआईडी प्रिंट करता है, यह अंतिम है &
जो इसे पृष्ठभूमि देता है, उदाहरण के ls &
लिए चलने के लिए पीआईडी दिखाएगाls
2
"मानक त्रुटि" फ़ाइल विवरणक है। >
शेल पुनर्निर्देशन है, और &1
"मानक आउटपुट" फ़ाइल डिस्क्रिप्टर है ( &
यहां इसकी आवश्यकता है, इसलिए शेल को नहीं लगेगा कि मैं किसी फ़ाइल का उल्लेख कर रहा हूं 1
)। इसलिए 2 > &1
किसी भी मानक त्रुटि आउटपुट को मानक इनपुट पर पुनर्निर्देशित करता है। चूंकि पूर्व > my.log
मानक आउटपुट को पुनर्निर्देशित करने का मतलब है my.log
, हमें यह सुनिश्चित करने के लिए एक तरीका चाहिए कि त्रुटि संदेश भी जाएं my.log
। 2 > &1
यह सुनिश्चित करता है कि ऐसी त्रुटियां मानक आउटपुट पर जाएं, जो बदले में जाती हैं my.log
। I / O पुनर्निर्देशन देखें ।
echo $!
इस प्रक्रिया के बदले मुझे नोहाप की पीडा दी गई
&
एक कमांड सीमांकक के रूप में कार्य करता है ताकि आप कोशिश कर सकें sh -c "nohup my_command > my.log 2>&1 & echo $! > save_pid.txt"
,। यह काम कर सकता है, लेकिन मैंने इसकी कोशिश नहीं की है।
मैं एक VPS सर्वर पर लाल टोपी का उपयोग कर रहा हूँ (और SSH - पोटीन के माध्यम से), मेरे लिए निम्नलिखित काम किया है:
सबसे पहले, आप सभी चल रही प्रक्रियाओं को सूचीबद्ध करते हैं:
ps -ef
फिर पहले कॉलम में आप अपना उपयोगकर्ता नाम पाते हैं; मैंने इसे तीन बार पाया:
फिर दूसरे कॉलम में आप nohup प्रक्रिया का PID पा सकते हैं और आप केवल टाइप करते हैं:
kill PID
(nohup प्रक्रिया के PID के साथ PID को बदलना)
और वह यह है!
मुझे आशा है कि यह उत्तर किसी के लिए भी उपयोगी होगा, मैं भी bash और SSH के लिए बहुत नया हूं, लेकिन 95% ज्ञान मुझे यहां मिला है :)
मुझे लगता है मैं नीचे की कमान के साथ पृष्ठभूमि में रूबी स्क्रिप्ट चला रहा हूँ
nohup ruby script.rb &
तब मैं कमांड नाम निर्दिष्ट करके पृष्ठभूमि की उपरोक्त प्रक्रिया को प्राप्त कर सकता हूं। मेरे मामले में कमान माणिक है।
ps -ef | grep ruby
उत्पादन
ubuntu 25938 25742 0 05:16 pts/0 00:00:00 ruby test.rb
अब आप आसानी से किल कमांड का उपयोग करके प्रक्रिया को मार सकते हैं
kill 25938
ps -ef
और kill
दोनों को अच्छी तरह से ऊपर कवर किया गया था, इसलिए नया हिस्सा क्या है?
जॉब्स -एल आपको नोहूप प्रक्रियाओं की सूची के लिए पीआईडी देना चाहिए। मार (-9) उन्हें धीरे से। ;)
kill -9
जब तक आप यह नहीं जानते कि नियमित सिग्नल काम नहीं करते हैं।
मान लीजिये आप nohup के साथ एक java प्रोग्राम को अंजाम दे रहे हैं, तो आप java प्रोसेस id प्राप्त कर सकते हैं
`ps aux | grep java`
उत्पादन
xxxxx 9643 0.0 0.0 14232 968 pts/2
तब आप टाइप करके प्रक्रिया को मार सकते हैं
sudo kill 9643
या यह कहते हैं कि आपको सभी जावा प्रक्रियाओं को मारने की जरूरत है, तो बस उपयोग करें
sudo killall java
यह कमांड सभी जावा प्रोसेसर को मारता है। आप इस प्रक्रिया के साथ उपयोग कर सकते हैं। केवल कमांड के अंत में प्रक्रिया का नाम दें
sudo killall {processName}
मैंने निम्नलिखित कमांड के साथ django सर्वर शुरू किया।
nohup manage.py runserver <localhost:port>
यह CentOS पर काम करता है:
:~ ns$netstat -ntlp
:~ ns$kill -9 PID
process not found
nohup के साथ भ्रम को हल करने के लिए जाना जाता है ।
आज मैं उसी समस्या से मिला। और जब से यह एक लंबे समय से पहले था, मैं पूरी तरह से भूल गया कि मैंने किस कमांड का इस्तेमाल किया और कब किया। मैंने तीन तरीके आज़माए:
ps -ef
कमांड । यह उस समय को दिखाता है जब आप अपनी प्रक्रिया शुरू करते हैं, और यह बहुत संभावना है कि आप अपने पास ssh (आप पर निर्भर करता है) से ठीक पहले आपको आदेश दें। दुर्भाग्य से मुझे नहीं लगता कि नवीनतम कमांड है जो मैं nohup का उपयोग करके चलाता हूं, इसलिए यह मेरे लिए काम नहीं करता है।ps -ef
कमांड में भी दिखाया गया है । इसका अर्थ है पेरेंट प्रोसेस आईडी, प्रक्रिया की आईडी जो प्रक्रिया बनाती है। Ppid प्रक्रिया के लिए ubuntu में 1 है जिसे चलाने के लिए nohup का उपयोग किया जाता है। फिर आप ps --ppid "1"
सूची प्राप्त करने के लिए उपयोग कर सकते हैं , और प्रक्रिया के पीआईडी को खोजने के लिए टाइम (आपकी प्रक्रिया का कुल सीपीयू समय) या सीएमडी की जांच कर सकते हैं।lsof -i:port
यदि प्रक्रिया कुछ बंदरगाहों पर कब्जा कर लेती है, और आपको कमांड मिलेगी। फिर ऊपर दिए गए उत्तर की तरह, उपयोग करें ps -ef | grep command
और आपको पीआईडी मिल जाएगी।एक बार जब आप प्रक्रिया का पीआईडी पा लेते हैं, तो प्रक्रिया kill pid
को टर्मिनल करने के लिए उपयोग कर सकते हैं ।
nohup
और बाद में इसके लिए इसका उपयोग करते हैंkill
, याps -ef
आउटपुट में इसके कमांड नाम से प्रक्रिया पाते हैं और उसी से पीआईडी प्राप्त करते हैं। आपको कमांड नाम ढूंढना है, नहींnohup
।