Centrum Skryptów - Systemy Operacyjne

W jaki sposób mogę obniżyć priorytet procesu za pomocą skryptu? Udostępnij na: Facebook

Skrypciarze odpowiadają na Wasze pytania

Cześć Skrypciarze!

Witamy w rubryce TechNet, w której Skrypciarze z firmy Microsoft odpowiadają na częste pytania dotyczące używania skryptów w administracji systemu. Jeśli macie jakieś pytania z tej dziedziny, zachęcamy do wysłania e-maila na adres: scripter@microsoft.com. Nie możemy zagwarantować odpowiedzi na każde otrzymane pytanie, ale staramy się jak możemy.

W jaki sposób mogę obniżyć priorytet procesu za pomocą skryptu?

Cześć, Skrypciarzu! W jaki sposób mogę obniżyć priorytet procesu za pomocą skryptu?

-- Jurek

Cześć, HS. Jak zapewne wszyscy wiecie, proces procesowi nierówny; każdy z nich ma określony priorytet. Procesy z wysokim priorytetem wykonywane są częściej (a co za tym idzie, wydają się działać prędzej) niż procesy o niskim priorytecie. I tak, procesy odpowiedzialne za obsługę myszy i klawiatury mają bardzo wysoki priorytet; w przeciwnym razie każde naciśnięcie klawisza albo przesunięcie myszy odnosiłoby skutek ze sporym opóźnieniem.

Ogólnie biorąc, większość procesów ma Normalny priorytet: nie za szybko i nie za wolno. Działa to całkiem nieźle. Czasem jednak warto zmienić priorytet niektórych procesów. I tak np. późnym wieczorem korzystne może być podniesienie priorytetu procesu X; dzięki temu zadanie związane z tym procesem wykonane zostanie szybciej. I na odwrót, jeśli proces ten działa w ciągu dnia, można obniżyć jego priorytet, by proces nie wpływał na szybkość innych procesów. Tyle na początek, ale rzecz jasna zanim zacznie zmieniać się priorytety procesów, trzeba wziąć pod uwagę wiele innych czynników. To było tylko dla orientacji, żeby każdy wiedział, o czym mówimy.

Przyjmijmy zatem, że rzeczywiście chcemy zmienić priorytet. Można to bez trudu zrobić używając Menedżera zadań; należy kliknąć proces prawym klawiszem myszki, wybrać opcję Ustaw priorytet, po czym wybrać odpowiedni poziom:

Fajnie. Ale czy można zrobić to za pomocą skryptu?

Owszem, ale tylko w systemach Windows XP i Windows Server 2003. (Niestety, skrypt ten nie zadziała w Windows 2000.) Jest to możliwe, ponieważ klasa WMI Win32_Process, obecna w tych dwu wersjach Windows, zawiera metodę o nazwie SetPriority, umożliwiającą właśnie modyfikowanie priorytetu uruchomionych procesów. I tak, oto przykładowy skrypt zmieniający priorytet procesu Notepad.exe (czyli Notatnika) na Poniżej normalnego:

Const BELOW_NORMAL = 16384



strComputer = "."

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")



Set colProcesses = objWMIService.ExecQuery _

    ("Select * from Win32_Process Where Name = 'Notepad.exe'")

For Each objProcess in colProcesses

    objProcess.SetPriority(BELOW_NORMAL) 

Next

Na początku skryptu definiujemy stałą o nazwie BELOW_NORMAL (poniżej normalnego), której wartość ustawiamy na 16384; jak się domyślacie, użyjemy jej potem do zmiany priorytetu Notatnika do poziomu Poniżej normalnego. Czy są inne wartości, umożliwiające zmianę priorytetu? Oczywiście. Oto one:

PriorytetWartość
Normalny32
Niski64
Czasu rzeczywistego128
Wysoki256
Poniżej normalnego16384
Powyżej normalnego32768

Po utworzeniu stałej skrypt łączy się z usługą WMI, a następnie za pomocą tego wiersza pobiera kolekcję procesów o nazwie Notepad.exe:

Set colProcesses = objWMIService.ExecQuery _

    ("Select * from Win32_Process Where Name = 'Notepad.exe'")

Po pobraniu kolekcji, używamy po prostu pętli For Each do przełączenia się przez wszystkie wystąpienia Notepad.exe. (W skrypcie zakładamy, że jest albo jedno wystąpienie Notatnika, albo, jeśli jest ich więcej, chcemy by wszystkie miały priorytet Poniżej normalnego.) Wewnątrz pętli wywołujemy metodę SetPriority, podając stałą BELOW_NORMAL jako jedyny parametr:

objProcess.SetPriority(BELOW_NORMAL)

Można teraz sprawdzić priorytet procesu Notepad.exe (używając skryptu lub Menedżera zadań) – zmienił się on na Poniżej normalnego.

Ostrzegamy jednak: przed zastosowaniem tego skryptu na np. serwerze plików radzimy poeksperymentować na komputerze testowym. Zmiana priorytetu Notatnika na Poniżej normalnego nie wyrządzi szkód, ale taka sama zmiana w stosunku do aplikacji bazodanowej może spowodować użytkownikom poważne problemu. Nie zalecamy też raczej ustawiania priorytetu na poziom Czasu rzeczywistego; proces taki prawdopodobnie pochłonąłby wszystkie zasoby komputera i uniemożliwił działanie wszystkiego innego (w tym kluczowych funkcji systemowych). Taka przyjacielska porada od Skrypciarzy!

 Do początku strony Do początku strony


Centrum Skryptów - Systemy Operacyjne