Como permanentemente “renunciar” a um processo no Mac OS X (ou iOS, etc)?

3

Eu uso um gerenciador de processos agradável (gratuito) chamado ATMonitor para Mac OS X que tem muitos recursos ocultos interessantes, uma delas é poder clicar em um processo em execução e definir o "renice" de +20 (menor prioridade) para -20 (prioridade mais alta).

A melhor parte é que ela fica entre as reinicializações. Então você quer que o XYZ tenha atenção total o tempo todo, você o define uma vez e pronto.

Eu quero fazer a mesma coisa (renunciar a um processo) em um iPad que executa um daemon em particular, e não sei como definir um renice permanentemente.

Eu posso fazer isso uma vez, e funciona bem, mas a configuração é perdida em uma reinicialização. Eu li em algum lugar.

Now, as for permanently resetting the priority of a process, this can't be done directly. You can fake it, however, with a shell script that starts the app and then immediately renice's it. Give that script a ".command" extension and it will be double-clickable in the GUI. Not very elegant, but it gets the job done.

Mas, como diz, não é muito elegante, e eu não acho que seja assim que a ATMonitor faz isso.

Eu encontrei esta questão e eles deram uma maneira de fazê-lo como um argumento de lançamento, mas nenhuma maneira aparente de salvá-lo como um valor persistente. Por exemplo, se o programa não fosse iniciado pelo launchd.

Como eu defino um nível de renice permanente, por binário executável, independente de seu PID, quando, como ou por que foi lançado?

    
por mralexgray 18.05.2011 / 19:03

2 respostas

3

Depois de muita pesquisa, descobri uma maneira de criar um applescript que lançaria e renunciaria a um programa. Ele também vai cuidar de toda a senha do administrador para você também. Apenas substitua o xxxxxxxxx com sua própria senha. Eu usei isso com uma variedade de programas e tudo parece funcionar. Honestamente, não consigo me lembrar por que pus um atraso de 1 segundo; Acho que queria apenas garantir que o programa tivesse sido lançado antes de ser renegado. Tenho certeza de que existem variações neste script. O bom disso é que você não precisa abrir o Activity Monitor, encontrar o ID do processo, etc. Esse script faz tudo isso para você. Eu apenas salvei cada script como um aplicativo, iniciei e tudo está bem. By the way, enquanto eu amo atMonitor, tem uma tendência relatada de repente pendurar seu sistema. Veja os comentários para ele no MacUpdate.

tell application "Safari"
    activate
    delay 1
end tell

tell application "System Events" to set unixID to unix id of process "Safari"
do shell script ("renice -20 " & unixID) password "xxxxxxxxx" with administrator privileges
    
por 18.07.2011 / 19:40
1

As perguntas sobre o iPad estão fora do tópico neste site, por ser considerado um "dispositivo eletrônico"; veja o FAQ .

Respondendo para o Mac OS X:

As alterações realizadas pelo atMonitor não ficam realmente entre as reinicializações . Eles são reaplicados quando o aplicativo e o atMonitor estão sendo executados novamente. Se você sair do Monitor e reiniciar o aplicativo renomeado, seu valor interessante será 0 novamente (verifique usando a coluna nice em ps axl ). Portanto, esse método exige que você esteja executando no Monitor.

Além disso, como você pode executar o binário real diretamente, por exemplo, /Applications/Firefox.app/Contents/MacOS/firefox-bin em vez de open -a Firefox , é impossível fazer essa mudança independente da forma como o aplicativo é iniciado sem realmente corrigir o próprio binário (que geralmente é algo entre complicado e simplesmente impossível)

Você pode fazer o que eu expliquei aqui , mas em vez de passar argumentos de linha de comando, inicie o aplicativo via nice . Isso será indistinguível do aplicativo real desde que você o inicie usando open , o Dock, clicando duas vezes no pacote do aplicativo, etc. Se você renomear o binário real e fornecer ao script de shell seu nome original (não alterando o Info.plist , até invocações codificadas passarão pelo seu script nice ). Isso ainda permitirá que os usuários iniciem o binário (agora renomeado), mas, além disso, funcionará.

    
por 18.05.2011 / 19:39