Alterar PRIORIDADE processo depois estiver rodando (Windows)

Galera,

Alguém sabe se é possível no Windows, via programação eu alterar a PRIORIDADE de um processo depois que ele estiver rodando? Seria algo do tipo do comando abaixo, porém necessito para um processo em execução:

Runtime.getRuntime().exec("cmd /C start /high MinhaApp.exe");

Valeu :wink:

Bom, você teria que ter a instância de process na mão para poder alterar (se é que é possível). Isso eu não sei como fazer (pegar a instância de outras aplicaçôes). Talvez seja possível e fácil de fazer (se o SO permitir) com processos filhos.

Bom, eu não sei ao certo, achei algumas coisas, veja se te ajuda:
http://forum.java.sun.com/thread.jspa?threadID=5289091&messageID=10219558
http://www.velocityreviews.com/forums/t151135-setting-java-runtime-process-priority.html
http://forum.java.sun.com/thread.jspa?threadID=705093&messageID=4087136

Você diz, prioridade de verdade? Tipo Linux? Numa boa, sem despertar flames: isso não existe de verdade no windows. Aliás, nem sei se existe de mentira (pelo seu post, parece que sim).

Um processo no windows define o momento em que ele vai parar de usar o processador. Se ele travar o processador para ele, babau!

Já no Linux (e em vários outros SO’s), o kernel e as prioridades definem o tempo de acesso ao processador. Ou seja, se ele demorar demais e outros processos estiverem na fila, o kernel dá uma paradinha no processo demorado e dá um tempo pro próximo processo priorizado da fila.

Aham, a sua afirmação valia no tempo do Windows 3.1 (16 bits), ou do MacOS antes da versão 10 (Mac OSX).

O Windows NT e seus sucessores (2000, XP, Vista etc.) usam um scheduler como os outros sistemas operacionais tradicionais (Unix/Linux, etc.)

Só o Windows 3.1 ou anteriores requeriam que um processo explicitamente passasse o controle para outro processo, usando a API Yield (nesse tempo não havia nem a API Sleep, para ter uma idéia).

Para você alterar a prioridade de um processo já rodando, o seu usuário (ou processo C/C++) tem de ter as permissões corretas, saber seu PID, obter um “process handle” a partir do PID (API do Windows OpenProcess) , e então você precisa usar a API do Windows SetPriorityClass.

Blz, valeu galera pelas respostas.

realmente thingol, você tem razão e eu fui enfático demais. Houve uma mudança nos padrões do windows mesmo. Mas foi após NT (no nt implementaram mas não funcionava direito). E mesmo no 2000 dava um certo pau (e você não tinha possibilidade de redefinição de prioridade dos serviços já rodando). O XP (na verdade o 2003 e 2005, porque falamos de servidores, eu creio) dá algum grau de prioridade (mas o gerenciamento não é simples).

O Vista não tem mais esse problema, porque afinal você mal consegue usar ele sozinho :slight_smile: (isso é triste mais é sério, porque um dos meus notebooks tem essa porcaria, e atualizado com sp1).

abraços,

otávio

[quote=otaviofcs]realmente thingol, você tem razão e eu fui enfático demais. Houve uma mudança nos padrões do windows mesmo. Mas foi após NT (no nt implementaram mas não funcionava direito). E mesmo no 2000 dava um certo pau (e você não tinha possibilidade de redefinição de prioridade dos serviços já rodando). O XP (na verdade o 2003 e 2005, porque falamos de servidores, eu creio) dá algum grau de prioridade (mas o gerenciamento não é simples).

O Vista não tem mais esse problema, porque afinal você mal consegue usar ele sozinho :slight_smile: (isso é triste mais é sério, porque um dos meus notebooks tem essa porcaria, e atualizado com sp1).

abraços,

otávio[/quote]

How Can I Lower the Priority of a Process Using a Script?
http://www.microsoft.com/technet/scriptcenter/resources/qanda/may05/hey0516.mspx

SetPriority for Windows (Programa externo)
http://gilchrist.ca/jeff/SetPriority/index.html

Interessante o script. E ele condiz com a minha explicação: