खोज…


वर्तमान नौकरियों की सूची

$ tail -f /var/log/syslog > log.txt
[1]+  Stopped                 tail -f /var/log/syslog > log.txt

$ sleep 10 &

$ jobs
[1]+  Stopped                 tail -f /var/log/syslog > log.txt
[2]-  Running                 sleep 10 &

नौकरी संभालना

रोजगार पैदा करना

एक नौकरी बनाने के लिए, बस एक & कमांड के बाद संलग्न करें:

$ sleep 10 &
[1] 20024

आप Ctrl + z दबाकर एक रनिंग प्रोसेस को भी काम बना सकते हैं:

$ sleep 10
^Z
[1]+  Stopped                 sleep 10

पृष्ठभूमि और अग्रभूमि एक प्रक्रिया

प्रक्रिया को अग्रभूमि में लाने के लिए, कमांड fg का उपयोग % साथ किया जाता है

$ sleep 10 &
[1] 20024

$ fg %1
sleep 10

अब आप प्रक्रिया के साथ बातचीत कर सकते हैं। इसे बैकग्राउंड में लाने के लिए आप bg कमांड का उपयोग कर सकते हैं। अधिग्रहीत टर्मिनल सत्र के कारण, आपको पहले Ctrl + z दबाकर प्रक्रिया को रोकना होगा।

$ sleep 10
^Z
[1]+  Stopped              sleep 10

$ bg %1
[1]+ sleep 10 &

कुछ प्रोग्रामर के आलस्य के कारण, ये सभी कमांड एक % साथ भी काम करते हैं यदि केवल एक प्रक्रिया है, या सूची में पहली प्रक्रिया है। उदाहरण के लिए:

$ sleep 10 &
[1] 20024

$ fg %        # to bring a process to foreground 'fg %' is also working.
sleep 10

या केवल

$ %           # laziness knows no boundaries, '%' is also working.
sleep 10

इसके अतिरिक्त, बिना किसी तर्क के सिर्फ fg या bg टाइप करना अंतिम कार्य को संभालता है:

$ sleep 20 &
$ sleep 10 &
$ fg
sleep 10
^C
$ fg
sleep 20

चल रही नौकरियां मारना

$ sleep 10 &
[1] 20024

$ kill %1
[1]+  Terminated              sleep 10

नींद प्रक्रिया प्रक्रिया आईडी (पीआईडी) 20024 और नौकरी नंबर 1 साथ पृष्ठभूमि में चलती है। प्रक्रिया को संदर्भित करने के लिए, आप या तो पीआईडी या जॉब नंबर का उपयोग कर सकते हैं। यदि आप नौकरी संख्या का उपयोग करते हैं, तो आपको इसे % साथ उपसर्ग करना होगा। डिफ़ॉल्ट मारने के द्वारा भेजे गए संकेत kill है SIGTERM है, जो लक्ष्य प्रक्रिया शान से बाहर निकलने के लिए अनुमति देता है।

कुछ आम मार संकेत नीचे दिखाए गए हैं। पूरी सूची देखने के लिए, kill -l चलाएं।

संकेत नाम संकेत मान प्रभाव
SIGHUP 1 फोन रख देना
SIGINT 2 कीबोर्ड से इंटरप्ट
SIGKILL 9 मारने का संकेत
SIGTERM 15 समाप्ति संकेत

विशिष्ट प्रक्रियाओं को शुरू करना और मारना

संभवतः रनिंग प्रक्रिया को मारने का सबसे आसान तरीका प्रक्रिया नाम के माध्यम से इसे चुनना है जैसा कि निम्नलिखित उदाहरण में pkill कमांड का उपयोग करके किया गया है

pkill -f test.py

(या) वास्तविक प्रक्रिया-आईडी की खोज करने के लिए pgrep का उपयोग करके अधिक मूर्ख-प्रूफ तरीका

kill $(pgrep -f 'python test.py')

ps -ef | grep name_of_process पर grep का उपयोग करके एक ही परिणाम प्राप्त किया जा सकता है ps -ef | grep name_of_process फिर परिणामस्वरूप पीआईडी (प्रोसेस आईडी) से जुड़ी प्रक्रिया को मार रहा है। अपने नाम का उपयोग करते हुए एक प्रक्रिया का चयन करना एक परीक्षण वातावरण में आश्वस्त है, लेकिन वास्तव में खतरनाक हो सकता है जब स्क्रिप्ट का उपयोग उत्पादन में किया जाता है: यह सुनिश्चित करना लगभग असंभव है कि नाम उस प्रक्रिया से मेल खाएगा जो आप वास्तव में मारना चाहते हैं। उन मामलों में, निम्नलिखित दृष्टिकोण वास्तव में बहुत सुरक्षित है।

स्क्रिप्ट शुरू करें जो अंततः निम्नलिखित दृष्टिकोण के साथ मारे जाएंगे। चलिए मान लेते हैं कि जिस कमांड को आप निष्पादित करना चाहते हैं और अंततः मारना है, वह है python test.py

#!/bin/bash

if [[ ! -e /tmp/test.py.pid ]]; then   # Check if the file already exists
    python test.py &                   #+and if so do not run another process.
    echo $! > /tmp/test.py.pid
else
    echo -n "ERROR: The process is already running with pid "
    cat /tmp/test.py.pid
    echo
fi

यह /tmp डायरेक्टरी में एक फाइल बनाएगा, जिसमें python test.py प्रक्रिया के पीआईडी python test.py । यदि फ़ाइल पहले से मौजूद है, तो हम मानते हैं कि कमांड पहले से ही चल रही है और स्क्रिप्ट में कोई त्रुटि है।

फिर, जब आप इसे मारना चाहें तो निम्न स्क्रिप्ट का उपयोग करें:

#!/bin/bash

if [[ -e /tmp/test.py.pid ]]; then   # If the file do not exists, then the
    kill `cat /tmp/test.py.pid`      #+the process is not running. Useless
    rm /tmp/test.py.pid              #+trying to kill it.
else
    echo "test.py is not running"
fi

यह किसी भी अस्थिर जानकारी (जैसे कमांड चलाने के लिए उपयोग की जाने वाली स्ट्रिंग) पर भरोसा किए बिना, आपकी कमांड से जुड़ी प्रक्रिया को मार डालेगा। इस मामले में भी यदि फ़ाइल मौजूद नहीं है, तो स्क्रिप्ट यह मानती है कि आप एक गैर-चल रही प्रक्रिया को मारना चाहते हैं।

इस अंतिम उदाहरण को एक ही कमांड को कई बार चलाने के लिए आसानी से सुधार किया जा सकता है (उदाहरण के लिए, इसे लिखने की बजाय पिड फ़ाइल में संलग्न करना) और उन मामलों का प्रबंधन करने के लिए जहां प्रक्रिया की मृत्यु होने से पहले मर जाता है।

सभी प्रक्रियाओं को सूचीबद्ध करें

किसी सिस्टम पर सभी प्रक्रियाओं को सूचीबद्ध करने के दो सामान्य तरीके हैं। दोनों सभी उपयोगकर्ताओं द्वारा चलने वाली सभी प्रक्रियाओं को सूचीबद्ध करते हैं, हालांकि वे उस प्रारूप में भिन्न होते हैं जो वे आउटपुट करते हैं (अंतर का कारण ऐतिहासिक है)।

ps -ef   # lists all processes 
ps aux   # lists all processes in alternative format (BSD)

यह जांचने के लिए इस्तेमाल किया जा सकता है कि क्या कोई दिया गया आवेदन चल रहा है। उदाहरण के लिए, यह जाँचने के लिए कि SSH सर्वर (sshd) चल रहा है:

ps -ef | grep sshd

जाँचें कि कौन सी प्रक्रिया विशिष्ट पोर्ट पर चल रही है

यह जांचने के लिए कि 8080 पोर्ट पर कौन सी प्रक्रिया चल रही है

lsof -i :8080

चल रही प्रक्रिया के बारे में जानकारी प्राप्त करना

ps aux | grep <search-term> खोज-खोज से मेल खाती प्रक्रियाओं को दर्शाता है

उदाहरण:

root@server7:~# ps aux | grep nginx
root       315  0.0  0.3 144392  1020 ?        Ss   May28   0:00 nginx: master process /usr/sbin/nginx
www-data  5647  0.0  1.1 145124  3048 ?        S    Jul18   2:53 nginx: worker process
www-data  5648  0.0  0.1 144392   376 ?        S    Jul18   0:00 nginx: cache manager process
root     13134  0.0  0.3   4960   920 pts/0    S+   14:33   0:00 grep --color=auto nginx
root@server7:~#

यहां, दूसरा कॉलम प्रक्रिया आईडी है। उदाहरण के लिए, यदि आप nginx प्रक्रिया को मारना चाहते हैं, तो आप kill 5647 कमांड kill 5647 उपयोग कर सकते हैं। यह हमेशा SIGKILL बजाय SIGTERM साथ kill कमांड का उपयोग करने की सलाह दी SIGKILL

बैकग्राउंड जॉब डिसाइड करना

$ gzip extremelylargefile.txt &
$ bg
$ disown %1

यह आपके शेल (टर्मिनल, ssh, आदि) के बंद होने पर एक लंबी चलने वाली प्रक्रिया को जारी रखने की अनुमति देता है।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow