3

次のコードを使用して、Cocoa で実行中のアプリケーションのリストを取得しています。

for (NSRunningApplication *app in [[NSWorkspace sharedWorkspace] runningApplications]) {
   MNSLog(@"%@",[app localizedName]);
}

ただし、ターミナル セッションから開始したアプリケーションがリストに表示されません (「ターミナル」は表示されます)。アプリケーションは、cocoa コードを実行している同じユーザーから開始されました。

起動したアプリケーションは Terminal の下にありますか? そのような場合、どうすればその名前と引数を見つけることができますか?

別の端末セッションで ps を実行すると、プロセスが正しく表示されます。

4

2 に答える 2

2

を使用して、シェル コマンドNSTaskを実行します。psman ページをチェックしてps、取得したい情報に基づいて渡す​​引数を決定できます。NSPipeおよびを使用しNSFileHandleて、タスクから結果を取得します。

フィルタリングを行いたい場合は、アプリが結果を取得する前にps出力をパイプすることができます。grep

最初の質問についてNSWorkspaceは、ウィンドウ サーバーを使用するアプリしか表示できないので、内部で実行されている実行可能ファイルではなく、ターミナルのみが表示されると思います。

于 2013-11-17T16:33:28.873 に答える
2

sysctlまたはコマンドを使用psして、すべての BSD プロセスのリストを取得できます。別のユーザーで実行されているアプリケーションを検出できないことを確認してください

于 2013-11-18T08:52:49.410 に答える