4

LaunchAgent(「トレイ」アイコンが付いた小さなUIアプリ。で定義されているものとしましょう)を提供するアプリを作成します/Library/LaunchAgents/foo.plist

パッケージlaunchctlをインストールすると、このLaunchAgentの説明が自動的に読み込まれ、ログインしているすべてのユーザーのプロセスが開始されます。(つまり、LaunchDaemonsの場合のように、launchctl loadを使用してロードする必要はありません)。

パッケージをアンインストールすると、LaunchAgent plistファイルを含むすべてのファイル/Library/LaunchAgentsが削除されますが、プロセスは引き続き実行されます。

(複数のユーザーがログインしているため、このエージェントのインスタンスがいくつかあります)

さて、rootとして実行しているときに(不特定の数のユーザーに対して)これらのプロセスを停止するようにroot launchdに指示するにはどうすればよいですか?(rootがそれらのエージェントを見ることさえないのでlaunchctlが実行されたことに注意してください)。

(pid-fileskillall more-or-less-unique-executable-nameは最後の手段であり、これらのソリューションを最後の手段として保持しています)

4

1 に答える 1

3

これを試して:

LOGGEDUSERS=`who | grep console | awk '{ print $1 }'`
for CURRUSER in $LOGGEDUSERS
do
    su -l $CURRUSER -c 'launchctl unload /Library/LaunchAgents/your.plist'
done

私のアンインストーラスクリプトにはkillall -15 <app_name>、そのコードの後に​​もあります(念のため)

于 2013-03-26T14:03:48.463 に答える