कम प्राथमिकता के साथ चलने के लिए विंडोज सेवा प्रक्रिया को कैसे कॉन्फ़िगर करें?


17

क्या कार्य प्रबंधक प्राथमिकता को मैन्युअल रूप से बदलने के बिना कम प्राथमिकता के साथ स्वचालित रूप से शुरू करने के लिए विंडोज सेवा प्रक्रिया (जैसे स्क्वीडएनटी, एसक्यूएल सर्वर, आदि) को कॉन्फ़िगर करने का एक तरीका है?


थ्रेड्स या प्रक्रियाओं की प्राथमिकता बदलना आमतौर पर एक बुरा विचार है, जब तक कि कोड को एक अलग प्राथमिकता पर चलाने के लिए नहीं लिखा गया हो। प्राथमिकताओं को बदलने से बचने के लिए समसामयिक मुद्दों की सूची में "प्राथमिकता उलटा" जोड़ता है।
रिचर्ड

1
ओपी ने यह नहीं पूछा कि यह एक अच्छा विचार था या नहीं। ओपी ने पूछा कि क्या यह किया जा सकता है, और कैसे । - कृपया विषय पर बने रहना याद रखें। 😉
BrainSlugs83

जवाबों:


11

सेवा नियंत्रण प्रबंधक, जो सेवाओं को शुरू करने / रोकने का काम करता है, इसमें शुरू होने वाली प्रक्रियाओं पर प्राथमिकता निर्दिष्ट करने के लिए कोई भी तंत्र (विंडोज के किसी भी संस्करण में) नहीं है।

चूंकि आप पहले से चल रही प्रक्रिया पर प्राथमिकता को संशोधित कर सकते हैं, ऐसा करने के लिए आपका सबसे अच्छा शर्त एक उपकरण का उपयोग करना हो सकता है।

मुझे प्रक्रिया प्राथमिकता को संशोधित करने के लिए Microsoft कमांड-लाइन टूल के बारे में पता नहीं है, लेकिन "PV" कमांड-लाइन भी, http://www.teamcti.com/pview/prcview.htm पर उपलब्ध है, प्राथमिकता निर्धारित करने के लिए एक फ़ंक्शन है ।

pv -pb process-name.exe

यह "प्रक्रिया-name.exe" को "सामान्य से नीचे" प्राथमिकता पर सेट करेगा।

यदि आप "सामान्य" प्राथमिकता पर शुरू होने वाली प्रक्रिया के साथ रह सकते हैं जब तक कि आप इसे बदलने के लिए चारों ओर नहीं पहुंचते हैं, तो आप ऐसा कर सकते हैं एक स्क्रिप्ट के साथ "शेड्यूल किए गए कार्य" के रूप में चल रहा है ताकि हर-बार-बार आग लग सके (यदि सेवा मिलती है बाउंस)।

यह एक त्वरित और गंदा हैक है, लेकिन मुझे जीवन में अपने भाग्य का बहुत जल्दी और गंदा हैक देना है जो काम करता है!


हो सकता है कि ऐप को शुरू करने के लिए एक बैच फ़ाइल चलाएं और फिर ऐप को सीधे चलाने के बजाय, बीच में एक छोटी नींद के साथ प्रक्रिया प्राथमिकता निर्धारित करें, और फिर प्राथमिकता सेट करने के लिए एक और कार्य चला रहा है। सब कुछ के लिए काम नहीं करेंगे, लेकिन एक कोशिश के काबिल हैं।
जॉन गार्डियर्स

3

उपरोक्त उत्तर मेरे लिए कारगर नहीं थे। मैंने निम्नलिखित पॉवरशेल स्क्रिप्ट का निर्माण किया:

ChangePriority.ps1

Get-WmiObject Win32_process -Filter 'name="ProcessName.exe"' | ForEach-Object {$_.SetPriority(128)}

और फिर मैंने एक निर्धारित कार्य बनाया जो इसे हर 5 मिनट में कहता है। से प्रशासक शीघ्र या बैच स्क्रिप्ट:

schtasks /Create /tn "Process Priority Change" /sc MINUTE /mo 5 /ru SYSTEM /tr "powershell -noprofile -executionpolicy bypass -file \"%cd%\ChangePriority.ps1\""

फ़ाइल को विफल करने के आधार पर निर्धारित कार्य करने के लिए यहांwmic चर्चा के रूप में उपयोग करने का प्रयास किया गया । सिमिलर को पॉवरशेल स्क्रिप्ट का उपयोग करते हुए: मैं केवल एक कमांड बनाने में सक्षम नहीं था जो सिर्फ इनलाइन स्क्रिप्ट के साथ एक कार्य बनाता है। सराहना की अगर आप इसे करने में कामयाब रहे और एक और जवाब जोड़ें।

पॉवरशेल लिपि में प्राथमिकता के लिए मान यहां पाया जा सकता है [1]।

[१] https://docs.microsoft.com/en-us/windows/desktop/cimwin32prov/setpriority-method-in-class-win32-process


बहुत उपयोगी। मैंने अपने खराब पीएस कौशल के साथ एक लाइन को काट दिया है जिसमें ऑडियो सर्विस को होस्ट करने की प्रक्रिया है, जो वास्तविक समय में भारी सीपीयू उपयोग (खराब ड्राइवर, मुझे लगता है) के दौरान ऑडियो क्रैकिंग को रोकने के लिए है। बहुत अच्छा काम करता है!
जेसनएक्सए

@JasonXA आपका स्वागत है। सराहना की अगर आप इसके बारे में एक लाइन संस्करण प्रदान कर सकते हैं, जो मैं नहीं कर सका
Ceztko

जरूर पढ़ें: PowerShell.exe -noprofile -executionpolicy bypass -command "& {Get-WmiObject Win32_service -Filter \" Name = 'AudioSrv' \ "| ForEve {Get-WmiObject Win32_process -Filter \" ProcessId = $ __ प्रक्रिया \ "} | ForEach-Object {$ _। SetPriority (256)}}" मुझे नहीं पता कि यह कितना सही है ... लेकिन यह काम करता है। मैंने इसे छुपाने का काम नहीं किया है, केवल उपयोगकर्ता w / व्यवस्थापक निजी के तहत काम कर सकता है।
जेसन एक्सए

1

निम्नलिखित भी काम कर सकते हैं। ImagePath रजिस्ट्री कुंजी को संपादित करें, और cmd.exe से प्रारंभ कमांड का उपयोग करें:

START ["title"] [/Dpath] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
      [/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
      [/WAIT] [/B] [command/program]
      [parameters]

दुर्भाग्य से यह बिल्कुल भी काम नहीं करता है क्योंकि ImagePathविंडोज सेवाओं के लिए इंटरफ़ेस का सम्मान करने के लिए निष्पादित निष्पादन योग्य होना चाहिए, और startइसे लागू नहीं करता है और न ही यह निष्पादन योग्य लॉन्च होने के लिए मार्ग नहीं करेगा।
सेप्टिकोको

0

मुझे यह करना था कि टीम बनाने के लिए कम सीपीयू लेना चाहिए। और, क्योंकि टीमसिटी एकमात्र जावा ऐप है जिसे हम चला रहे हैं, यह समाधान पूरी तरह से काम करता है।

  1. स्टार्टअप "मैनुअल" के रूप में सेट सेवा।
  2. एक बैच फ़ाइल बनाएँ, जो आपकी सेवा शुरू करेगी, और प्राथमिकता को कम करेगी, जैसे:

    net start tcbuildagent
    net start teamcity
    wmic प्रक्रिया जहां नाम = "java.exe" CALL सेटपैरैरिटी "नीचे"

  3. एक "कार्य शेड्यूलर" कार्य बनाएं, "विंडोज़ स्टार्टअप" पर ट्रिगर किया गया, जो उस बैच फ़ाइल को लॉन्च करेगा।

मैंने कार्य को प्रारंभ करने के लिए अन्य सेवाओं के साथ हस्तक्षेप नहीं करने के लिए 1 मिनट की देरी के साथ टास्कसाइडर ट्रिगर को कॉन्फ़िगर किया।

ps आप अपनी सभी सेवाओं के स्टार्टअप को मैनुअल के रूप में भी सेट कर सकते हैं, और उस बैच फ़ाइल का उपयोग उन सभी को शुरू करने के लिए कर सकते हैं, जो आप चाहते हैं! एसक्यूएल, आईआईएस, आदि।


0

आप निम्न शक्तियाँ स्क्रिप्ट कर सकते हैं, इसे एक निर्धारित कार्य में डाल सकते हैं जो स्टार्टअप पर चलता है।

do {
    start-sleep -s 5
    $obj = Get-WmiObject Win32_process -Filter 'name="processname"'
} while ($obj -eq $null)
$obj.SetPriority(16384)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.