15

NSXPCConnectionFoundation.framework (など)にある XPC API を使用して、同じ XPC サービスの複数のインスタンスを実行することはできますか? ドキュメントは、この問題について多くの洞察を提供していません。

編集:簡単なテストを行ったところ、2 つの XPC 接続を作成したにもかかわらず、サービスのインスタンスが 1 つしか実行されていないようです。別のインスタンスを実行させる方法はありますか?

4

5 に答える 5

8

少し遅れましたが、この質問に対する決定的な答えはxpcservice.plist マンページで提供されています:

ServiceType (デフォルト: アプリケーション)

XPC サービスのタイプは、サービスをインスタンス化する方法を指定します。値は次のとおりです。

• アプリケーション: 各アプリケーションは、このサービスの一意のインスタンスを持ちます。

• ユーザー: ユーザーごとに作成されたサービス プロセスのインスタンスが 1 つあります。

• システム: システム全体に対してサービス プロセスのインスタンスが 1 つあります。システム XPC サービスは、システム フレームワーク内に存在するように制限されており、root が所有する必要があります。

結論: ほとんどの場合、XPC サービスのインスタンスは 1 つだけであり、異なるアプリケーションが同じサービスに接続できる場合 (サービスがアプリにバンドルされている場合でも接続できない場合) にのみ、複数のインスタンス (1 つのインスタンス) が存在します。 -アプリごとのインスタンス)。

于 2014-04-14T13:28:17.017 に答える
1

XPCサービスは、複数の接続ごとに1つのインスタンス用に設計されていると思います。おそらく、1つの実行可能ファイルで名前付きパイプを管理する方が便利です。したがって、ほとんどの場合、複数のインスタンスを同時に作成することは不可能です。

于 2012-12-26T07:32:05.857 に答える
0

XPC サービスには状態がないため、1 つ以上のインスタンスが実行されているかどうかは問題ではありません。

XPC サービスは、launchd によって管理されます。launchd は、オンデマンドでサービスを起動し、クラッシュした場合は再起動し、SIGKILLアイドル状態の場合は (を送信して) 終了します。これは、応答を必要とするメッセージの処理中にサービスがクラッシュした場合を除き、サービスを使用するアプリケーションに対して透過的です。その場合、launchd によってサービスが再起動されるまで、アプリケーションは XPC 接続が無効になったことを確認できます。XPC サービスはいつでも突然終了する可能性があるため、最小限の状態を保持するように設計する必要があります。理想的には、サービスは完全にステートレスである必要がありますが、これが常に可能であるとは限りません。

–– <a href="https://developer.apple.com/library/mac/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CreatingXPCServices.html" rel="nofollow">XPC サービスの作成

必要なすべての状態情報を xpc 呼び出しに入れ、永続化する必要がある場合はそれをクライアントに返します。

于 2013-05-06T19:43:11.160 に答える