2010-08-26 7 views
6

द्वारा एक प्रक्रिया आईडी खोजें, बाहरी निष्पादन योग्य कॉल किए बिना, रूबी में नाम या पूर्ण कमांड लाइन द्वारा मुझे एक पिड कैसे मिल सकता है?नाम

मैं एक प्रक्रिया में SIGUSR2 भेज रहा हूं जिसका कमांड लाइन ruby job.rb है। मैं pgrep करने के लिए कॉल के बिना निम्नलिखित करना चाहते हैं:

uid = Process.uid 
pid = `pgrep -f "ruby job.rb" -u #{uid}`.split("\n").first.to_i 
Process.kill "USR2", pid 
+0

इस सवाल का जवाब नहीं है, लेकिन अगर हम पहले से ही एक बाहरी प्रणाली कॉल करते समय, हम भी वहीं प्रक्रिया मार सकते हैं। जैसे '\' pgrep -f 'कुछ नौकरी' | xargs मार \ '' – Dennis

उत्तर

4

एक त्वरित Google खोज sys_proctable के साथ आई, जो आपको पोर्टेबल तरीके से ऐसा करने देनी चाहिए।

अस्वीकरण: मैं रूबी का उपयोग नहीं करता, यह पुष्टि नहीं कर सकता कि यह काम करता है या नहीं।

7

यह करने के लिए कैसे अपने ऑपरेटिंग सिस्टम पर निर्भर करता है। लिनक्स मानते हुए, आप मैन्युअल रूप से/proc फाइल सिस्टम को क्रॉल कर सकते हैं और दाएं कमांड लाइन की तलाश कर सकते हैं। हालांकि, यह वही बात है जो pgrep कर रही है, और वास्तव में प्रोग्राम कम पोर्टेबल बना देगा।

ऐसा कुछ काम कर सकता है।

def get_pid(cmd) 
    Dir['/proc/[0-9]*/cmdline'].each do|p| 
    if File.read(p) == cmd 
     Process.kill("USR2", p.split('/')[1]) 
    end 
    end 
end 

बस/proc में चारों ओर पोकिंग सावधान रहें।

+0

* कम पोर्टेबल * की बात करते हुए - यह Solaris पर काम नहीं करता है। आप मान रहे हैं कि आप यहां लिनक्स पर चल रहे हैं। – Beano

+4

हां, मैंने कहा "लिनक्स मानते हुए।" – AboutRuby

+0

+1 एक और जवाब स्वीकार किया, लेकिन मुझे यह भी पसंद है। फ़ाइल पैरामीटर – Joel

1

डेबियन आधारित सिस्टम pidof कमांड के साथ pid ढूंढें।

कुछ मार माणिक के साथ प्रक्रिया समारोह:

def killPid(cmd) 
    pid=exec("pidof #{cmd}") 
    Process.kill "USR2", pid 
end 
+1

के साथ किसी भी भाषा में लिनक्स पर आप कितना कर सकते हैं, इसके बारे में एक अनुस्मारक यदि आप अलग-अलग पैराम के साथ एक ही कमांड के कई उदाहरण चलाते हैं तो –

+0

यह खतरनाक हो सकता है, पैरामीटर कहां है से आ रही। आप एक स्ट्रिंग में स्ट्रिंग को इंटरपोल कर रहे हैं। स्ट्रिंग अच्छी तरह से 'परीक्षण हो सकता है; आरएम-आरएफ/var/www/'। [exec] (https://ruby-doc.org/core-2.4.1/Kernel.html#method-i-exec) इस तरह की चीजों को कई तर्कों में ले सकता है, इसलिए 'exec (' pidof ', cmd) ' अधिक सुरक्षित होगा। – amenthes

संबंधित मुद्दे