0

特権ヘルパー ツールが launchdaemon としてインストールされ、 経由で起動されたときに実行されるプロセスのリターン コードまたはプロセス ID を知る方法はありますかSMJobSubmit()

ここで説明したように、SMJobSubmit API を使用していくつかのタスクを特権的に実行するアプリケーションがあります。

タスクが成功したかどうかを知るために、次のいずれかを実行する必要があります。

  1. 最適なオプションは、実行された実行可能ファイルのリターン コードを取得することです。
  2. もう 1 つのオプションは、アプリケーションと launchd の間にパイプを作成できるかどうかです。
  3. 上記の 2 つが不可能な場合は、/tmp の場所にファイルを書き込んでアプリから読み取るなどのハックに頼る必要があります。

SMJobSubmit は内部的に launchdaemon ディクショナリを含む実行可能ファイルを launchd に送信し、これがその実行を担当すると思います。したがって、launchd にクエリを実行して、ラベル「mylabel」で実行された実行可能ファイルのリターン コードを見つける方法はありますか。

4

1 に答える 1

1

これを直接行う方法はありません。

SMJobSubmit複雑なタスクの単純なラッパーです。また、タスクを非同期で起動しても同期的に戻ります。そのため、ジョブの送信に失敗するとエラーが発生する可能性がありますが、実行に失敗したジョブを正常に送信した場合、それを見つける方法はありません。

そのため、ヘルパーからアプリに通信するコードを明示的に記述して、アプリが稼働中であることを報告する必要があります。

何らかの通信メカニズム (シグナル、ファイル、Unix または TCP ソケット、JSON-RPC over HTTP など) を既に構築している場合は、それを使用してください。

何かをゼロから設計している場合は、XPC が最良の答えかもしれません。XPC を使用してヘルパーを起動することはできませんが (特権があるため)、Mach サービスを登録して xpc_connection_create_mach_service を呼び出すことにより、手動で接続を作成できます。

于 2012-09-19T23:59:34.557 に答える