Comment réinitialiser en permanence un processus sur Mac OS X (ou iOS, etc.)?

J'utilise un gestionnaire de processus agréable (gratuit) appelé ATMonitor pour Mac OS X qui possède de nombreuses fonctionnalités cachées, dont l'une peut cliquer sur un processus en cours d'exécution et définir le "renice" de +20 (moins de priorité) à -20 (priorité la plus élevée).

La meilleure partie est qu'il s'insère entre les redémarrages. Donc, vous voulez que XYZ prenne toute l'attention tout le temps, vous l'avez configuré une fois et c'est fait.

Je veux faire la même chose (renice une procédure) sur un iPad exécutant un démon particulier, et je ne sais pas comment configurer définitivement un renice.

Je peux le faire une fois, et ça marche bien, mais le réglage est perdu lors d'un redémarrage. J'ai lu quelque part.

Maintenant, comme pour réinitialiser en permanence la priorité d'un processus, cela ne peut pas être fait directement. Vous pouvez le fausser, cependant, avec un script shell qui démarre l'application, puis immédiatement renice. Donnez à ce script une extension ".command" et il sera double-cliquable dans l'interface graphique. Pas très élégant, mais ça fait le travail.

Mais, comme on dit, pas très élégant, et je ne pense pas que c'est comme ça que ATMonitor le fait.

J'ai trouvé cette question et ils ont donné un moyen de le faire comme un argument de lancement, mais aucun moyen apparent de le sauvegarder comme une valeur persistante. Par exemple, si le programme ne démarrait pas par launchd.

Comment puis-je définir un niveau renice permanent, par exécutable binaire, indépendamment de son PID, quand, comment, ou pourquoi il a été lancé?

Après de nombreuses recherches, j'ai trouvé un moyen de créer une application qui lancera et renigrera un programme. Il prend également en charge l'intégralité du mot de passe administrateur pour vous aussi. Remplacez simplement le xxxxxxxxx par votre propre mot de passe. J'ai utilisé cela avec une gamme de programmes, et tous semblent fonctionner. Honnêtement, je ne me souviens pas pourquoi j'ai mis un retard de 1 seconde dans le cas; Je pense que je voulais simplement m'assurer que le programme avait été lancé avant qu'il ne soit renié. Je suis sûr qu'il existe des variations sur ce script. La bonne chose à ce sujet est que vous n'avez pas à ouvrir Activity Monitor, à trouver l'identification du processus, etc. Ce script vous permet de faire tout cela. Je sauvegarde simplement chaque script en tant qu'application, lancez-le, et tout est zippy. Soit dit en passant, alors que j'adore Moniteur, il a tendance à accroître soudainement votre système. Voir les commentaires sur 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 

Les questions sur l'iPad sont hors sujet sur ce site, car il est considéré comme un "appareil électronique"; Voir les FAQ .

Réponse pour Mac OS X:

Les modifications effectuées par atMonitor ne restent pas entre les redémarrages . Ils sont réappliqués lorsque l'application et AtMonitor sont à nouveau exécutés. Si vous quittez AtMonitor et redémarrez l'application renommée, sa bonne valeur est de nouveau 0 (vérifiez l'utilisation de la nice colonne dans ps axl ). Donc, cette méthode nécessite que vous exécutiez chez Moniteur.

En plus, puisque vous pouvez exécuter le binaire réel directement, par exemple /Applications/Firefox.app/Contents/MacOS/firefox-bin au lieu d' open -a Firefox /Applications/Firefox.app/Contents/MacOS/firefox-bin open -a Firefox , il est impossible de rendre ce changement indépendant de la façon dont l'application démarre sans Réellement patching le binaire lui-même (qui est généralement quelque part entre fou compliqué et tout simplement impossible)

Vous pouvez faire ce que j'ai expliqué ici , mais au lieu de passer des arguments de ligne de commande, lancez l'application par l'intermédiaire de nice . Cela sera indistinguable de l'application réelle tant que vous l'utiliserz à l'aide de open , le Dock, en double-cliquant sur le paquet d'applications, etc. Si vous renommez le binaire réel et donnez au script shell son nom d'origine (ne changez pas l' Info.plist invocations codées, même codées, vont passer par votre nice script). Cela permettra également aux utilisateurs de lancer le binaire (maintenant renommé) eux-mêmes, mais en plus, cela fonctionnera.