2009-07-06 7 views
0

J'ai une application (un démon dans/Library/StartupItems pour être précis) fonctionnant en tant que root qui lance parfois un autre processus en utilisant system("open /Applications/MyAppName.app"). Cela fonctionne bien sauf que sur certains ordinateurs, MyAppName est lancé en tant que root, au lieu de sous l'utilisateur actuel.L'appel du système ("open <app name.app>") provoque parfois le lancement de l'application en tant que root

J'essaye de comprendre pourquoi c'est, et comment je peux obtenir l'application pour toujours lancer en tant qu'utilisateur actuel.

Le problème semble se produire sur les sites d'entreprise exécutant une combinaison de répertoire ouvert/actif. Comme j'ai un accès limité à ces machines, j'essaie de formuler au moins quelques hypothèses avant de demander plus de temps. L'autre indice que je possède est que sur au moins un de ces ordinateurs si vous ouvrez Activity Monitor et inspectez le processus "Finder", la section "User:" affiche le nom d'utilisateur mais pas d'utilisateur (le "(UID) "section est entièrement manquant).

En outre, le processus parent affiche "launchd (1)" plutôt que "launchd (95)" comme le font la plupart des applications standard. Cette instance de launchd, je crois, est la première chose à démarrer chaque fois que l'ordinateur est démarré et exécuté en tant que root, par rapport à l'autre instance de launchd qui s'exécute en tant qu'utilisateur connecté. En plus des problèmes de sécurité évidents, j'ai besoin que l'application ne s'exécute pas en tant qu'utilisateur root afin de prendre en charge des fonctionnalités telles que l'ouverture/la visibilité pour deux utilisateurs connectés simultanément.

Est-ce que quelqu'un a des idées sur ce qui pourrait être à l'origine de ce problème ou comment je pourrais y remédier?

Répondre

5

J'ai quelques commentaires:

  1. Vous devez faire votre démon un démon approprié launchd, à savoir tenir un plist dans/Library/LaunchDaemons. /Library/StartupItems est obsolète. Voir http://developer.apple.com/documentation/MacOSX/Conceptual/BPSystemStartup/BPSystemStartup.html.

  2. Vous ne devriez probablement pas lancer le second démon directement à partir de votre démon. Vous devriez probablement en faire un autre démon.

  3. Assurez-vous de maîtriser cette technologie. Note: http://developer.apple.com/technotes/tn2005/tn2083.html. C'est une lecture essentielle et devrait expliquer pourquoi il y a plus d'un processus de lancement et devrait vous donner des indices décents sur ce qui ne va pas dans votre cas. En outre, open est juste une enveloppe autour des services de lancement auxquels vous pouvez accéder directement, plutôt que d'appeler system. Cependant, comme je l'ai dit, vous ne devriez pas lancer votre second démon en utilisant open ou les services de lancement.

Si vous ne pouvez pas poster plus de détails sur exactement ce qu'il est votre daemons faire, nous pourrions être en mesure de vous donner des conseils quant à la meilleure façon de le faire. Par exemple, il est souvent préférable de lancer votre démon de lancement à la demande plutôt que de le faire fonctionner en continu.

+0

Merci, c'est un peu d'aide. J'ai en effet basculé vers l'utilisation d'un démon d'agent utilisateur pour ma deuxième application. –

Questions connexes