जब आप काम कर रहे होते हैं, तो कभी-कभी आपके प्रोग्राम अचानक फ्रीज हो जाते हैं। अन्य समय में, प्रोग्राम अभी भी चल रहे होते हैं लेकिन उच्च प्रोसेसर या मेमोरी खपत के साथ। Linux में ps (Process Status) कमांड का उपयोग करके इसे ठीक करने का एक तरीका है। यहां हम आपको दिखाते हैं कि Linux में ps कमांड का उपयोग करके वर्तमान में चल रही प्रक्रियाओं और उनके PIDs को कैसे सूचीबद्ध किया जाए। फिर आप उन प्रक्रियाओं को ढूंढकर मार सकते हैं जो आपके संसाधनों का उपभोग कर रही हैं।
ps कमांड का उपयोग करना
ps कमांड का उपयोग अपने आप में किया जा सकता है। यह चार कॉलम की जानकारी आउटपुट करेगा:
- PID: सिस्टम द्वारा परिभाषित प्रक्रिया का अद्वितीय पहचानकर्ता। यह वह मान है जिसका उपयोग हम किसी प्रक्रिया को रोकने के लिए करते हैं।
- TTY: वह टर्मिनल जिससे प्रक्रिया शुरू की गई थी।
- TIME: प्रक्रिया द्वारा उपयोग किया गया कुल CPU समय।
- CMD: वह कमांड जो प्रक्रिया उत्पन्न करती है
ध्यान दें कि जब आप बिना किसी विकल्प के कमांड का उपयोग करते हैं, तो यह आपको अधिक जानकारी नहीं दिखाता है। यहां इसे अधिक उपयोगी बनाने के कुछ तरीके दिए गए हैं।
1. सभी उपयोगकर्ताओं की प्रक्रियाओं को सूचीबद्ध करें
जब कुछ प्रोग्राम इंस्टॉल किए जाते हैं, तो वे कभी-कभी प्रक्रिया चलाने के लिए अतिरिक्त उपयोगकर्ता भी बनाते हैं। उपयोगकर्ताओं की प्रक्रियाओं को सूचीबद्ध करने के लिए, -e विकल्प का उपयोग करें:
ps -e
और इसका आउटपुट:
PID TTY TIME CMD 1 ? 00:00:02 systemd 2 ? 00:00:00 kthreadd 3 ? 00:00:00 kworker/0:0 4 ? 00:00:00 kworker/0:0H 5 ? 00:00:00 kworker/u256:0 6 ? 00:00:00 mm_percpu_wq
2. अधिक जानकारी के साथ प्रक्रिया सूचीबद्ध करें
चल रही प्रक्रिया को सूचीबद्ध करते समय अधिक जानकारी प्राप्त करना संभव है। ऐसा करने के लिए, आप ef विकल्प का उपयोग कर सकते हैं।
ps -ef
और इसका आउटपुट:
UID PID PPID C STIME TTY TIME CMD root 1 0 0 21:34 ? 00:00:03 /sbin/init maybe-ubiquity root 2 0 0 21:34 ? 00:00:00 [kthreadd] root 3 2 0 21:34 ? 00:00:00 [kworker/0:0] root 4 2 0 21:34 ? 00:00:00 [kworker/0:0H] root 6 2 0 21:34 ? 00:00:00 [mm_percpu_wq] root 7 2 0 21:34 ? 00:00:00 [ksoftirqd/0]
3. प्रोसेस ID द्वारा प्रक्रिया को फ़िल्टर करें
यदि आप उस चल रही प्रक्रिया का प्रोसेस ID जानते हैं जिसे आप दिखाना चाहते हैं, तो आप -p फ्लैग के साथ विशेष रूप से इसके लिए फ़िल्टर कर सकते हैं। यह कई PIDs को तर्क के रूप में ले सकता है, जिन्हें एक कॉमा और बिना स्पेस के अलग किया जाता है।
ps -ef -p 1234,5678,9012
4. किसी उपयोगकर्ता के स्वामित्व वाली प्रक्रियाओं को सूचीबद्ध करें
आप u विकल्प के बाद उपयोगकर्ता के नाम का उपयोग करके किसी उपयोगकर्ता के स्वामित्व वाली प्रक्रियाओं को भी सूचीबद्ध कर सकते हैं:
ps -u userName
और इसका आउटपुट:
PID TTY TIME CMD 2832 ? 00:00:00 systemd 2842 ? 00:00:00 (sd-pam) 3043 ? 00:00:00 sshd 3044 pts/1 00:00:00 bash 18396 pts/1 00:00:00 ps
5. सक्रिय प्रक्रियाओं को सूचीबद्ध करें
ax विकल्प का उपयोग करके सभी सक्रिय प्रक्रियाओं को सूचीबद्ध करना संभव है:
ps -ax
और इसका आउटपुट:
PID TTY STAT TIME COMMAND 1 ? Ss 0:02 /sbin/init maybe-ubiquity 2 ? S 0:00 [kthreadd] 3 ? I 0:00 [kworker/0:0] 4 ? I< 0:00 [kworker/0:0H] 6 ? I< 0:00 [mm_percpu_wq] 7 ? S 0:00 [ksoftirqd/0]
6. उपयोगकर्ताओं के साथ सक्रिय प्रक्रियाओं को सूचीबद्ध करें
-aux फ्लैग जोड़कर उपयोगकर्ताओं के साथ सभी सक्रिय प्रक्रियाओं को सूचीबद्ध करना संभव है:
ps -aux
और इसका आउटपुट:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.2 78132 9188 ? Ss 21:34 0:02 /sbin/init maybe-ubiquity root 2 0.0 0.0 0 0 ? S 21:34 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? I 21:34 0:00 [kworker/0:0] root 4 0.0 0.0 0 0 ? I< 21:34 0:00 [kworker/0:0H] root 6 0.0 0.0 0 0 ? I< 21:34 0:00 [mm_percpu_wq] root 7 0.0 0.0 0 0 ? S 21:34 0:00 [ksoftirqd/0] root 8 0.0 0.0 0 0 ? I 21:34 0:00 [rcu_sched] root 9 0.0 0.0 0 0 ? I 21:34 0:00 [rcu_bh] root 10 0.0 0.0 0 0 ? S 21:34 0:00 [migration/0]
7. प्रोग्राम के नाम से प्रक्रिया को फ़िल्टर करें
ps परिणाम पर फ़िल्टर लागू करके चल रहे किसी विशिष्ट प्रोग्राम के बारे में जानकारी प्राप्त करना संभव है:
ps -aux | grep docker
और इसका आउटपुट:
root 1508 0.0 2.2 1518156 90868 ? Ssl 21:34 0:03 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock userkub+ 18429 0.0 0.0 13144 1108 pts/1 S+ 23:57 0:00 grep --color=auto docker
वैकल्पिक रूप से, आप प्रक्रिया को उसके नाम से फ़िल्टर करने के लिए C विकल्प का भी उपयोग कर सकते हैं:
ps -C name
8. विशिष्ट कॉलम प्रदर्शित करें
चार डिफ़ॉल्ट कॉलम के अलावा, आप ps से जानकारी का एक अतिरिक्त कॉलम प्रदर्शित करवा सकते हैं। उदाहरण के लिए:
ps -e -o pid,uname,pcpu,pmem,comm
-o फ्लैग ps कमांड के परिणामों के लिए विशिष्ट आउटपुट प्रदर्शन विकल्प सेट करता है। ps के लिए मानक प्रदर्शन विकल्पों की पूरी सूची देखें।
9. पदानुक्रमित ट्री शैली में परिणाम प्रदर्शित करें
ps -e --forest
यह प्रक्रियाओं को प्रदर्शित करने के लिए ASCII आर्ट का उपयोग करके एक ट्री-शैली संरचना बनाता है। फोर्क की गई और चाइल्ड प्रक्रियाओं को उपयुक्त पैरेंट प्रक्रियाओं के वंशज के रूप में दिखाता है, मिलान करने के लिए सॉर्टिंग के साथ। ट्री की "शाखाओं" को छिपाने के लिए, --forest के स्थान पर -H का उपयोग करें।
10. प्रोसेस थ्रेड्स प्रदर्शित करें
ps -p 4041 -L
-L फ्लैग ps की किसी भी कार्यक्षमता के लिए थ्रेडेड डिस्प्ले को चालू करता है। यह किसी विशिष्ट प्रक्रिया के थ्रेड्स को ट्रैक करते समय सबसे उपयोगी होता है।
11. सभी रूट प्रक्रियाएं दिखाएं
ps -f -U root -u root
वास्तविक और प्रभावी रूट पहचान के साथ चल रही सभी प्रक्रियाओं की खोज करें। यह उन्हें -f फ्लैग के कारण पूर्ण-लंबाई प्रारूप में दिखाता है। आप आउटपुट को अनुकूलित करने के लिए इसे -o फ्लैग के साथ जोड़ सकते हैं।
प्रक्रिया को रोकने के लिए kill कमांड का उपयोग करें
एक बार जब आप गलत व्यवहार करने वाली प्रक्रिया का पता लगा लेते हैं, तो आप चल रही प्रक्रिया को मारने के लिए kill कमांड का उपयोग कर सकते हैं। कमांड एक सिग्नल भेजता है जो प्रक्रिया को समाप्त करता है। जब आपके प्रोग्राम फ्रीज हो जाते हैं, तो ज्यादातर समय आपको उन्हें -9 विकल्प के साथ जबरन मारना होगा।
ps का आउटपुट एक त्वरित दृश्य है। htop के विपरीत, यह स्वयं को गतिशील रूप से अपडेट नहीं करता है। इसका मतलब है कि आपको यह स्पष्ट तस्वीर प्राप्त करने के लिए इसे कई बार चलाना पड़ सकता है कि कौन सी प्रक्रिया गलत व्यवहार कर रही है। प्रक्रियाओं का अद्यतन दृश्य प्राप्त करने के लिए, आप Linux सिस्टम के लिए कुछ अन्य कमांड आज़मा सकते हैं।