2013-01-23 10 views
5

OS Xで自分のアプリケーションの状態を監視する方法を探しています。さまざまな通信チャネルの状態など、監視する必要のあるコンポーネントがいくつかあります。それらがダウンした場合、監視プロセスは、画面上とプッシュ通知の両方でユーザーに警告することができます。OS Xでプロセスを監視する方法は?

XPCサービスは有望ですが、アプリがクラッシュした場合、これもサービスを引き継ぐか、間違っていますか?

私の推奨する解決策は、予期しない終了を監視し、発生した場合にアプリケーションを再起動するものです。

これを行うにはどのような方法が最適ですか?

答えて

0

各プロセスが独自のスレッドで実行されている場合、スレッドが稼動しているかどうかを監視するウォッチドッグプログラムを実行できます。ループ内でpsを実行し、出力を解析するスクリプトはそれを実行できます。

さまざまなオプションhereが表示されます。コマンド名で選択する場合は-C、すべてのスレッドを表示する場合は-mを参照してください。

1

メインアプリケーションを子プロセスとして起動するアプリケーションを作成して終了するのを待つことができます。終了コードを確認して、必要に応じて対応することができます。

このアプローチは、ここで説明されていますhttps://stackoverflow.com/a/78095/785411

は、子プロセスとして、メインアプリケーションを実行するために)(いくつかの監視プロセスをフォークに、これは、ここで説明されていますhttps://stackoverflow.com/a/4327062/785411

1

は、私はあなたがおそらくを利用することができると思いますLaunchdとCrashReporterの組み込み機能を使用して要件を満たすことができます。

Launchdは、バックグラウンドプロセスの起動と監視を目的としたOS Xシステム管理者であり、通常はXPCサービスの実行に使用されます。 Launchdエージェントはさまざまなシステムイベントに反応し、クラッシュした場合にプロセスを再起動するように設定できます(property listKeepAlive/SuccessfulExitキーで指定)

Launchdは、起動イベントとしてさまざまなシステムイベント、スケジュールされた時刻、またはネットワーク接続のリッスンなど、さまざまな機能を実行できます。

CrashReporterは、すべてのプロセスクラッシュをキャッチして記録するOS Xのシステム機能です。 AppleSystemLogger facilityを介してログに記録され、リンクされたTechNoteに記載されているsyslogツールを使用してアクセスできます。マウンテンライオンでは、ユーザープロセスのクラッシュレポートは~/Library/DiagnosticReports/になり、クラッシュイベントごとにクラッシュログとplistファイルのペアが作成されます。

私はあなたの要件を達成するためにいくつかの方法でこれらの機能を使用できると思います。もしlaunchdがxpcサービスの実行を担当していれば、クラッシュイベント時に再起動する可能性があり、クラッシュします。

新しいログにクラッシュレポートディレクトリ(たとえば、QueueDirectoriesプロパティを使用)を監視してアプリケーションを再起動するか、通知を表示することで、クラッシュイベントに応答する起動エージェントを作成できます。

2

私は、通信チャネルの監視などは、それぞれの特定のコンポーネント(プロセス)で行う必要があると思います。予期しないエラーが発生した場合、コンポーネントは適切なクリーンアップを確実に行うために直ちに終了する必要があります。 processe監視のために

は、Apple社のテクニカルQ &の下の文書は本当に参考になります:アップルのテクニカルノートに役立つ参照用
Technical Note TN2050: Observing Process Lifetimes Without Polling

+0

1! – Floris

関連する問題