@lochost127
Мастер на одну руку

Скрипт убивание процесса?

Здравствуйте,

Наклипал вот такую штуку, в тестах все удачно прошло, но, я не подумал что реальные процессы для которых это делалось имеют одинаковые имена, соответственно формула не отрабатывает, т.к. при выводе Get-Process -Name someprogram я получаю целый список.

Сам вижу несколько вариантов,
Либо как-то привязать определенное кол-во pid'ов к программе (все процессы стартуют из одного экзешника)
Если есть возможность, то считывать с определенной строчки и сделать таких функций столько же сколько процессов, их кол-во будет неизменно, и даже если будут меняться местами, то ничего страшного
или вообще все переделывать уже черт знает как.

Голова уже изрядно побаливает, т.к. пэшем владею только на интуитивном уровне + черный пояс по гуглению, хотя можно ли привязать pid к процессу в винде, так и не выяснил =) по этому пусть будет коричневый пояс. Хотя если ядро закрыто, то что-то мне подсказывает, что нельзя.

$sleepseconds = 1
$numcores = 4

while($true) {
$cpu1 = (Get-Process -Name KeePass).cpu
sleep $sleepseconds
$cpu2 = (Get-Process -Name KeePass).cpu
$result=[int](($cpu2 - $cpu1)/($numcores*$sleepseconds) * 100)
if ($result -gt 75)
{
Stop-Process -Name KeePass
}
}


Цель в убийстве процесса, который жрет 75% cpu

Посоветуйте что-нибудь, пожалуйста!
  • Вопрос задан
  • 126 просмотров
Пригласить эксперта
Ответы на вопрос 1
@MaxKozlov Куратор тега PowerShell
Можно сначала записать данные в hashtable
Get-Process $processname | Foreach-Object { $pslist=@{} } { $pslist[$_.id]=$_.cpu }

А потом результаты второй выборки сравнивать с первой
Get-Process $processname | Where-Object { ($_.cpu - $pslist[$_.id])/($numcores*$sleepseconds) * 100 -gt 75  }


ну и делать с ними что хочется
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы