2012-08-02 14 views
7

मैं यह जानना चाहता हूं कि कोई प्रक्रिया चल रही है या नहीं। मैं किसी भी सिस्टम ("") कमांड का उपयोग नहीं करना चाहता हूं। क्या कोई सी आधारित फ़ंक्शन है जो आपको बताता है कि कोई प्रक्रिया चल रही है या नहीं?सी में कोई प्रक्रिया चल रही है या नहीं?

मैं प्रक्रिया का नाम प्रदान करना चाहता हूं और जानना चाहता हूं कि यह चल रहा है या नहीं।

धन्यवाद,

+0

मुझे लगता है कि आपको वास्तव में क्या करना है इसके बारे में अधिक विशिष्ट होना चाहिए। क्या आप प्रश्न में प्रक्रिया के ढक्कन या नाम को जानते हैं? –

+0

मुझे प्रक्रिया का नाम पता है, हां। – Kitcha

+0

आप इस संबंधित प्रश्न को देखना चाहेंगे: http://stackoverflow.com/questions/3667486/display-all-process-using-a-posix-function – rayd09

उत्तर

9

ज़रूर, kill(2) का उपयोग करें:

#include <sys/types.h> 
#include <signal.h> 

int kill(pid_t pid, int sig); 

तो sig 0 है, तो कोई संकेत भेज दिया जाता है, लेकिन त्रुटि जाँच अभी भी किया जाता है, इसका उपयोग प्रक्रिया आईडी या प्रक्रिया समूह आईडी के अस्तित्व की जांच के लिए किया जा सकता है।

तो बस प्रक्रिया है कि आप के लिए जाँच करें और यदि आपको एक त्रुटि (ESRCH) मिलता है देखना चाहता हूँ की प्रक्रिया आईडी पर kill(pid, 0) कहते हैं।

+0

यह जांचने का एक अच्छा तरीका है कि आपके पास प्रक्रिया आईडी है या नहीं, लेकिन उसके पास केवल प्रक्रिया का नाम है। – cegfault

+0

@cegfault: यह सच है। एक नाम वास्तव में आपको "प्रक्रिया" नहीं बताता है, हालांकि, उसी नाम से कई प्रक्रियाएं हो सकती हैं। मुझे लगता है कि ओपी के सवाल में कई महत्वपूर्ण विवरणों की कमी है। –

+0

कोई "प्रक्रिया नाम" नहीं है: 'execve (argv [0], नल, न्यूल);' – wildplasser

0

आप वर्तमान में चल रहे सभी प्रक्रियाओं के लिए /proc फाइल सिस्टम स्कैन कर सकते हैं और देख सकते हैं कि cmdline प्रविष्टि उस विशेष प्रक्रिया के लिए आप जो चाहते हैं उससे मेल खाती है।

हालांकि, दौड़ की स्थिति है। यह तय करने के बाद प्रक्रिया चल सकती है कि यह चल रहा था।

आपकी प्रक्रिया अभी भी चल रही है या नहीं, यह जानने के लिए निश्चित अग्नि तरीका यह है कि प्रक्रिया शुरू की गई है। फिर, जब कोई बच्चा मर जाता है, तो आपको SIGCHLD मिल जाएगा और आप यह पता लगाने के लिए waitpid(-1,..) का उपयोग कर सकते हैं कि कौन सा बच्चा मर गया।

2

लिनक्स पर, ऐसा करने का एक और तरीका /proc निर्देशिका की सामग्री की जांच करना शामिल हो सकता है। क्रमांकित निर्देशिकाएं प्रक्रिया आईडी हैं, जबकि cmdline फ़ाइल वाली उपनिर्देशिका कमांड का नाम दिखाती हैं।

उदाहरण के लिए, यदि /proc/1234/cmdline मूल्य foo होता है, तो foo की प्रक्रिया 1234 की एक आईडी आप PIDs के नाम इस तरह से मैप कर सकते, का उपयोग करते हुए सी में मानक फ़ाइल पहुँच कार्यों में अधिक जानकारी के लिए देखें proc(5) है।

1

आप इस दिलचस्प हो सकता है: http://programming-in-linux.blogspot.com/2008/03/get-process-id-by-name-in-c.html

"पारंपरिक और सबसे अच्छा तरीका है" यह करने के लिए /proc फ़ोल्डर पढ़ा जाता है। आप this question को और अधिक के लिए देख सकते हैं, जो http://procps.sourceforge.net/ संदर्भित करता है, जो आपके लिए

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