Script on Ending Process sesuai dengan konsumsi memori windows 10


0

Saya mencari skrip batch atau PowerShell bahwa jika memori yang digunakan oleh suatu proses kurang dari 10 MB, akhiri proses itu dan mulai kembali. Saya mencoba mencari banyak, tetapi saya tidak dapat menemukan solusi terbaik.

Ini adalah skrip yang saya coba tetapi tidak berhasil. Tolong bantu, terima kasih!

:start
@ECHO OFF
SET procName=iexplorer.exe
SET RAMLimit=10240
FOR /F "tokens=*" %%F IN ('tasklist^|findstr %procName%') DO SET foundString=%%F
FOR /F "tokens=5" %%F IN ("%foundString%") DO SET RAMConsumption=%%F
IF %RAMConsumption% LEQ %RAMLimit% && ping 8.8.8.8 -n 6 | FIND /I "out"
if errorlevel 0 (
TASKKILL /IM %procName%
) else (
echo iexplorer is working
)
goto start

Anda tidak akan mendapatkan jawaban untuk pertanyaan seperti ini, karena superuser bukan layanan penulisan skrip gratis. Tolong tunjukkan kepada kami penelitian Anda dan masalah apa yang Anda laksanakan, maka kami dengan senang hati membantu.
SimonS

1
Saya telah menambahkan skrip yang saya coba. Terima kasih atas sarannya.
Frankruss

Kurang dari 10MB? Saya dapat memahami keinginan untuk memulai kembali proses yang menghabiskan terlalu banyak memori, tetapi tidak terlalu sedikit. Apa yang Anda coba selesaikan?
Richard

Jawaban:


1

Ini akan menjadi Solusi PowerShell:

Get-Process iexplore -ea 0 | where { $_.PM -le 10MB } | foreach {
    $Path = $_.Path
    [bool]$Ping = Test-Connection 8.8.8.8 -Quiet
    if ($Path -and $Ping) {
        Stop-Process $_ -Force
        Start-Process $Path
    }
}

pertama, semuanya terlihat iexplore proses, lalu filter dalam where semua proses yang memiliki Konsumsi RAM kurang dari 10MB. Untuk Setiap proses yang cocok dengan where, berhenti dan memulai kembali proses

Sunting: sepertinya Anda ingin menjalankan ini dalam infinite loop, jika demikian, cukup bungkus skrip Anda dalam a while lingkaran seperti ini

while ($true) {
    Get-Process iexplore -ea 0 | where { $_.PM -le 10MB } | foreach {
        $Path = $_.Path
        [bool]$Ping = Test-Connection 8.8.8.8 -Quiet
        if ($Path -and $Ping) {
            Stop-Process $_ -Force
            Start-Process $Path
        }
    }
    sleep -s 1
}

jika tidak ada jalan:

while ($true) {
    Get-Process iexplore -ea 0 | where { $_.PM -le 10MB } | foreach {
        [bool]$Ping = Test-Connection 8.8.8.8 -Quiet
        if ($Ping) {
            Stop-Process $_ -Force
            Start-Process iexplore
        }
    }
    sleep -s 1
}

Terima kasih pak. Terima kasih banyak. Saya hampir sampai, tetapi ada beberapa masalah dengan skrip Anda. Saya ingin memeriksa proses secara terus-menerus bahwa jika memori kurang dari 10 MB, aplikasi akan restart. Proses ini dimulai kembali sesuai skrip Anda .tapi jika memori yang digunakan lebih dari 10 MB daripada macet. Dan hal terakhir pak saya ingin juga menambahkan kondisi yang memulai kembali proses hanya jika kurang dari 10 MB dan internet berfungsi. Seperti halnya ping 8.8.8.8 ini true.I bisa melakukan cmd tetapi saya tidak tahu mucj = h di powershell.THANKS SIR.
Frankruss

@ Frankruss Saya menambahkan beberapa logika, apakah itu berfungsi dengan baik sekarang?
SimonS

Pak terima kasih atas dukungan Anda. Saya ingin jika kedua kondisi ini benar yaitu memori kurang dari 10MB dan internet tidak berfungsi maka hanya restart proses. Logika Anda memulai kembali proses hanya jika internet berfungsi dan kondisi memori benar. Tapi ketika saya putuskan internet itu menutup proses tetapi tidak me-restart lagi. Terima kasih.
Frankruss

@ Frankruss ok, sekarang itu harus berperilaku seperti yang Anda inginkan. meskipun saya tidak mengerti bagian internet. itu akan restart sekarang jika ping bisa mencapai 8.8.8.8. jika Anda ingin memulai kembali jika ping TIDAK mencapai 8.8.8.8, ubah if ($Path -and $Ping) untuk if ($Path -and !$Ping)
SimonS

1
THNKS SIR.Ini bekerja sekarang.
Frankruss
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.