मैं सर्वर पर एक 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 foundnohup के साथ भ्रम को हल करने के लिए जाना जाता है ।
आज मैं उसी समस्या से मिला। और जब से यह एक लंबे समय से पहले था, मैं पूरी तरह से भूल गया कि मैंने किस कमांड का इस्तेमाल किया और कब किया। मैंने तीन तरीके आज़माए:
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।