.Exe फ़ाइल नाम द्वारा कुछ प्रक्रियाओं को मारें


126

मैं C # .NET या C ++ में उनके .exe फ़ाइल नाम की खोज करके कुछ सक्रिय प्रक्रियाओं को कैसे मार सकता हूं?


2
यदि आपको आंशिक नाम से किल प्रक्रिया की आवश्यकता है तो stackoverflow.com/questions/14632162/… देखें ।
एलेक्सी लेवेनकोव

जवाबों:


241

शीघ्र जवाब:

foreach (var process in Process.GetProcessesByName("whatever"))
{
    process.Kill();
}

(प्रक्रिया नाम से छुट्टी। exe)


2
यदि उपरोक्त कोड रिटर्न अपवाद हो तो क्या करना चाहिए (एक 32 बिट प्रक्रिया 64 बिट प्रक्रिया के मॉड्यूल तक नहीं पहुंच सकती है)?
मनीष

40
".Exe" छोड़ दें। MSDN से: "प्रक्रिया का नाम प्रक्रिया के लिए एक अनुकूल नाम है, जैसे कि आउटलुक, जिसमें .exe एक्सटेंशन या पथ शामिल नहीं है"

1
@AgainMe Process.Kill () एक प्रक्रिया को एक किल सिग्नल भेजता है, जो जहां भी होता है, इसके निष्पादन को रोक देगा। यह एक इंटरप्ट सिग्नल से अलग है जिसमें प्रक्रिया को सिग्नल से प्रतिक्रिया देने और / या साफ करने का मौका नहीं मिलेगा। उस प्रक्रिया में अधिक निष्पादन नहीं होगा, और उस प्रक्रिया द्वारा उपयोग किए गए संसाधनों पर कोई भी लॉक जारी किया जाएगा। एनवायरनमेंट। एक्सिट () वर्तमान में निष्पादित प्रक्रिया द्वारा एक सफल कोड के साथ खुद को मारने के लिए किया जाता है, जो पूरी तरह से सुरक्षित है। Process.Kill () लगभग पर्यावरण की तरह सुरक्षित नहीं है। Exit ()।
2

2
मैं LINQ के उपयोग का सुझाव देता हूं: var procs = Process.GetProcesses ()। जहाँ (pr => pr.ProcessName.Contains ("Spotify"));
Leandro

2
किसी प्रक्रिया के विशिष्ट उदाहरण को मारने का कोई विकल्प? मेरा मतलब है, के Contains("Spotify"))सभी उदाहरणों को मारता है Spotify मैं एक विशेष उदाहरण को मारना चाहता हूं Spotify
बन्नी इशाक के

38

मेरा समाधान सभी प्रक्रियाओं को सूचीबद्ध करने के लिए Process.GetProcess () का उपयोग करना है।
जिन प्रक्रियाओं को मैं चाहता हूं, उन्हें फ़िल्टर करके मैं उन्हें रोकने के लिए Process.Kill () विधि चला सकता हूं:

var chromeDriverProcesses = Process.GetProcesses().
    Where(pr => pr.ProcessName == "chromedriver"); // without '.exe'

foreach (var process in chromeDriverProcesses)
{
     process.Kill();
}

अपडेट करें:

मामले में यदि ( Async Enumerables ) asyncसे कुछ उपयोगी हालिया तरीकों के साथ दृष्टिकोण का उपयोग करना चाहते हैं , तो यह जांचें:C# 8

const string processName = "chromedriver"; // without '.exe'
await Process.GetProcesses()
             .Where(pr => pr.ProcessName == processName)
             .ToAsyncEnumerable()
             .ForEachAsync(p => p.Kill());

नोट: asyncतरीकों का उपयोग करने का मतलब यह नहीं है कि कोड हमेशा तेजी से चलेगा, लेकिन कम से कम यह सीपीयू समय बर्बाद नहीं करेगा और ऑपरेशन करते समय अग्रभूमि के धागे को लटकने से रोकेगा। किसी भी मामले में, आपको यह सोचने की ज़रूरत है कि आपको कौन सा संस्करण चाहिए।


आप समतुल्य के बजाय कॉन्टेन्स का उपयोग कर सकते हैं
Leandro

10
मजेदार संयोग है, मैं इस धागे में क्रोमेड्रिवर को मारने के समाधान के लिए देख रहा था। एक सामान्य मुद्दा होना चाहिए।
kerl

मुझे भी। हालांकि यह इसे हल करने के लिए प्रतीत नहीं होता है। आरंभिक कंसोल जो बंद हो जाता है, वास्तव में chrome.exe का एक उदाहरण है और मैं अनुमान लगा रहा हूं कि आप उन सभी को बंद नहीं करना चाहते हैं जब तक कि इसका निर्माण / परीक्षण एजेंट नहीं होता है
Dan Csharpster

16

आप Process.GetProcesses()वर्तमान में चल रही प्रक्रियाओं को प्राप्त करने के लिए उपयोग कर सकते हैं , फिर Process.Kill()एक प्रक्रिया को मारने के लिए।


6
Process.GetProcessesByName इसे सरल करेगा।
कंसल्ट यू जूल 27'10

यदि उपरोक्त कोड रिटर्न अपवाद हो तो क्या करना चाहिए (एक 32 बिट प्रक्रिया 64 बिट प्रक्रिया के मॉड्यूल तक नहीं पहुंच सकती है)?
मनीष

0

यदि आपके पास प्रक्रिया आईडी है ( PIDतो आप इस प्रक्रिया को निम्नानुसार मार सकते हैं:

Process processToKill = Process.GetProcessById(pid);
processToKill.Kill();

0

आप एमएस वर्ड के एक विशिष्ट उदाहरण को मार सकते हैं।

foreach (var process in Process.GetProcessesByName("WINWORD"))
{
    // Temp is a document which you need to kill.
    if (process.MainWindowTitle.Contains("Temp")) 
        process.Kill();
}

-2
public void EndTask(string taskname)
{
      string processName = taskname.Replace(".exe", "");

      foreach (Process process in Process.GetProcessesByName(processName))
      {
          process.Kill();
      }
}

//EndTask("notepad");

सारांश : कोई भी बात नहीं है अगर नाम में .exe है, तो प्रक्रिया समाप्त हो जाएगी। आपको "प्रक्रिया नाम से .exe बंद" करने की आवश्यकता नहीं है, यह 100% काम करता है।


1
.Replace(".exe", "")शीर्ष मतदान के उत्तर पर एक सरल बहुत कम
सजायाफ्ता

इसका पूरा विचार यह है कि। विधि के साथ या बिना .exe देखने के लिए लोग इसे संभालने के कई तरीके देख सकते हैं ... यह कॉपी और पेस्ट के लिए नहीं है ....
user7993881
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.