Mengubah prioritas proses Windows melalui baris perintah

42

Saya ingin mengubah prioritas proses Windows melalui baris perintah.

Bagaimana saya bisa melakukan itu?

Bobs
sumber

Jawaban:

55

Sintaks baris perintah:

wmic process where name="AppName" CALL setpriority ProcessIDLevel

Contoh:

wmic process where name="calc.exe" CALL setpriority 32768

atau

wmic process where name="calc.exe" CALL setpriority "above normal"

Prioritas:

  • idle: 64 (atau "idle")
  • di bawah normal: 16384 (atau "di bawah normal")
  • normal: 32 (atau "normal")
  • di atas normal: 32768 (atau "di atas normal")
  • prioritas tinggi: 128 (atau "prioritas tinggi")
  • waktu nyata: 256 (atau "waktu nyata")
Bobs
sumber
7
Anda juga dapat melakukan wildcard wmic process where "CommandLine like '%calc%'" CALL setpriority "below normal"
laggingreflex
Mungkin untuk melakukan hal yang sama untuk Background (IO rendah dan prioritas memori) seperti di Process Explorer?
miky
apakah ini akan bekerja bahkan pada "cmd.exe" dari batch? ... batch yang akan memulai cmd.exe itu?
gamer0
Catatan: himpunan kutipan pertama adalah wajib, jadi di cangkang lain kuotasi harus diloloskan (atau dikutip ganda). Dalam Cygwin:wmic process where 'name="calc.exe"' CALL setpriority "idle"
piojo
2
mengapa di bawah / di atas nilai normal begitu besar dan aneh? Dan mengapa normal kurang dari idle dan realtime?
phuclv
11

Tambahan kecil.

Anda juga dapat menggunakan nilai string sebagai ganti bilangan bulat (lebih mudah untuk dihafal) seperti itu:

 wmic process where name="calc.exe" CALL setpriority "idle"

Nilai yang mungkin: "idle", "rendah", "di bawah normal", "normal", "di atas normal", "prioritas tinggi", "realtime"

PS. Jangan lupa tanda kutip, terutama jika menggunakan beberapa kata dalam nilai string

Asbak
sumber
Set kutipan pertama adalah wajib, bahkan jika tidak menggunakan banyak kata. Itu juga harus diteruskan ke perintah, daripada ditafsirkan oleh shell.
piojo
Pada win10 Pro 1809, "rendah" bukan nilai yang dikenali - itu melempar kesalahan. menggunakan "Idle" menyebabkan proses ditampilkan sebagai prioritas "rendah" di task manager ...
ljwobker
5

Dari baris perintah batch saya hanya akan menggunakan PowerShell. Contoh ini memulai calc.exe, menemukan prosesnya dan menyesuaikan kelas prioritasnya menjadi "IDLE", alias RENDAH:

start /b /wait powershell.exe -command "calc.exe;$prog = Get-Process -Name calc;$prog.PriorityClass = [System.Diagnostics.ProcessPriorityClass]::IDLE"

Tentukan salah satu dari nilai enumerasi berikut: " Normal, Idle, High, RealTime, BelowNormal, AboveNormal"

Ini adalah hal yang sama dari PowerShell dengan garis terpecah:

calc.exe
$prog = Get-Process -Name calc
$prog.PriorityClass = [System.Diagnostics.ProcessPriorityClass]::IDLE
Knuckle-Dragger
sumber
Apa gunanya mengulangi apa yang sudah dikatakan sebelumnya?
harrymc
@harrymc Ini menjawab pertanyaan awal, menggunakan PowerShell.
paradroid
@harrymc - sebenarnya saya mengulangi apa yang saya katakan dari DEC. stackoverflow.com/questions/20693028/…
Knuckle-Dragger
Tidak masalah. Hanya saja saya terhubung ke sesuatu yang sangat mirip.
harrymc
5

Selain jawaban yang ada, pertanyaan Windows Equivalent of 'nice' mencantumkan beberapa solusi lainnya:

  1. Menggunakan perintah MULAI dalam command-prompt (CMD).
  2. Menggunakan ProcessTamer gratis untuk mengatur aturan pada .exe yang secara otomatis ditegakkan setiap kali proses itu dimulai.
  3. Menggunakan skrip PowerShell yang ada di sini .
  4. Menggunakan skrip VBScript yang ada di sini .

Selain itu, utilitas SetPriority lama mungkin masih berfungsi, tetapi saya belum mencobanya selama bertahun-tahun sekarang.

Beberapa solusi ini mungkin tidak berfungsi pada layanan sistem atau mungkin perlu Dijalankan sebagai Administrator .

harrymc
sumber
Hambatan yang jelas dengan solusi vbScript adalah bahwa dibutuhkan 23 baris kode untuk menyelesaikan tugasnya (yaitu mengatur tingkat prioritas), di mana perintah START hanya membutuhkan 2 baris untuk melakukannya (satu, pada keadaan darurat, sehingga bahkan bekerja pada prompt perintah kosong): mulai "" / realtime / b / w program.exe
Ed999
1

Saya menjalankan Windows 7 64-bit.

The wmic perintah tidak dapat diandalkan. Dalam pengalaman saya yang cukup banyak, gagal secara tak terduga karena terlalu banyak alasan (kebanyakan tidak dapat dijelaskan).

Perintah terbaik yang mungkin, karena keandalannya, adalah perintah MULAI. Sintaksnya sangat sederhana (ini adalah perintah 3-line run untuk file batch ):

::  Boost thread priority
SET command=<program.exe> <options>
start "" /REALTIME /B /W  %command%

Menurut pendapat saya, tingkat keandalan yang tinggi berasal dari kenyataan bahwa ia menetapkan tingkat prioritas dengan mana program exe diluncurkan, daripada mencoba untuk ikut campur dengan prioritas setelah program mulai berjalan dengan prioritas yang berbeda.

Ed999
sumber