के साथ चल रहे कमांड की पिड कैसे प्राप्त करें मैं इस आदेश की पिड प्राप्त करने का प्रयास कर रहा हूं।सुडो
sudo -b tcpdump -i eth0 port 80 -w eth0.pcap
के साथ चल रहे कमांड की पिड कैसे प्राप्त करें मैं इस आदेश की पिड प्राप्त करने का प्रयास कर रहा हूं।सुडो
sudo -b tcpdump -i eth0 port 80 -w eth0.pcap
इस उद्देश्य के लिए मैं
sudo gvim &
ps aux | grep gvim
मेरा पीछा उत्पादन
root 11803 0.0 0.0 12064 2776 pts/3 T 12:17 0:00 sudo gvim
केवल हड़पने के लिए के साथ की आपूर्ति में प्रवेश करेंगे पीआईडी मैं
ps aux | awk '/gvim/ {print $2}'
जो एक को मारने के पाइप से वापसी होगी और साथ ही बस
मैं awk
से कार्यक्रम को मार सकता है awk का उपयोग करना पसंद
ps aux | awk '/gvim/ {print "sudo kill -9 "$2}' | bash
यदि आपके साथ एक ही समय में चल रही कोई अन्य जीवीआईएम प्रक्रियाएं हैं तो यह आपके अधिक उत्तर देगा। –
हां, जब मैंने इस प्रश्न का उत्तर दिया तो उनके मूल प्रश्न पर उनकी टिप्पणी नहीं लिखी गई थी। मेरे पास अतिरिक्त समय है जब मैं अपना जवाब संशोधित करूंगा। – matchew
आप $!
उपयोग कर सकते हैं पिछले पृष्ठभूमि प्रक्रिया की पीआईडी (जो इस मामले में sudo हो जाएगा) प्राप्त करने के लिए, और ps --ppid
अपने बच्चों के बारे में पता लगाने के लिए। उदाहरण के लिए:
$ sudo tcpdump -i eth0 port 80 -w eth0.pcap &
$ ps --ppid $! -o pid=
16772
$ ps --pid 16772
PID TTY TIME CMD
16772 pts/3 00:00:00 tcpdump
आप एक स्क्रिप्ट में इस कर रहे हैं, तो आप एक sudo
ps
के बीच और sleep 1
का उपयोग करने के लिए सुनिश्चित करें कि बच्चा प्रारंभ कर सकते हैं।
ध्यान दें कि यदि आपको वास्तव में -b
ध्वज को सूडो में उपयोग करना चाहिए, तो यह काम नहीं करेगा, क्योंकि इससे सूडो को अतिरिक्त कांटा करने और तुरंत बाहर निकलने का कारण होगा, बच्चे और माता-पिता के बीच कनेक्शन खोना होगा (tcpdump कमांड प्राप्त होगा init के लिए reparented), जिसका मतलब है कि बच्चे को किसी अन्य समान आदेश से अलग करने का कोई आसान तरीका नहीं होगा।
-o
ps
विकल्प आपको चुनने के लिए कि कौन से फ़ील्ड प्रदर्शित करना है। उन क्षेत्रों में, आप संचयी सीपीयू समय (cputime
), विलुप्त समय (etime
) जैसी चीजें दिखा सकते हैं, और समय शुरू कर सकते हैं (lstart
)। आप --sort
का उपयोग कर एक फ़ील्ड को भी क्रमबद्ध कर सकते हैं। तो आपके लिए एक समाधान हो सकता है:
ps -eo pid,command,lstart --sort lstart | grep 'sudo -b tcpdump' | tail -1
तुम भी क्षेत्र के द्वारा आप क्रमबद्ध करना चाहते हैं प्रदर्शित करने के लिए ps
बताने की आवश्यकता नहीं है। अधिक जानकारी के लिए man ps
।
sudo -u username sh -c "echo \$\$ > /tmp/my_pid/file; exec my_command" &
यहाँ अन्य उत्तर ps उत्पादन grepping पर भरोसा करते हैं:
यहाँ एक तरह से यह करने के लिए है। यदि एकाधिक tcpdump आदेश चल रहे हैं, तो आप गलती से गलत पिड grep कर सकते हैं। यह वास्तविक पिड प्राप्त करता है और इसे एक फाइल में रखता है।
$ sudo -u root sh -c "echo \$\$ > /tmp/tcpdump.pid; exec tcpdump -i en3 -w eth0.pcap" &
[1] 37201
tcpdump: listening on en3, link-type EN10MB (Ethernet), capture size 65535 bytes
$ sudo kill `cat /tmp/tcpdump.pid`
6212 packets captured
6243 packets received by filter
0 packets dropped by kernel
[1]+ Done sudo -u root sh -c "echo \$\$ > /tmp/tcpdump.pid; exec tcpdump -i en3 -w eth0.pcap"
$
नहीं "-ef ps" यह करना होगा:
यहाँ एक उदाहरण रूट के रूप में tcpdump चल रहा है? –
मैं कई tcpdump कमांड चला रहा हूं, इसलिए मैं $ की तरह कुछ करना चाहता हूं! (अंतिम कमांड पिड)। – user87005
'ps aux | grep sudo | tail -n 1' काम नहीं करेगा? – khachik