web-dev-qa-db-ja.com

Mac OS X(またはiOSなど)でプロセスを永続的に「解放」するにはどうすればよいですか?

私はMacOS X用に ATMonitor と呼ばれる素敵な(無料の)プロセスマネージャーを使用しています。MacOSXには、実行中のプロセスをクリックして「renice」を設定できるクールな隠し機能がたくさんあります。 +20(優先度が低い)から-20(優先度が最も高い)。

最良の部分は、再起動の間に固執することです。したがって、XYZに常に十分な注意を払ってもらいたいので、一度設定すれば完了です。

特定のデーモンを実行しているiPadで同じこと(プロセスをrenice)したいのですが、reniceを永続的に設定する方法がわかりません。

一度はできますが、正常に動作しますが、再起動すると設定が失われます。どこかで読んだ。

現在、プロセスの優先度を永続的にリセットすることに関しては、これを直接行うことはできません。ただし、アプリを起動してすぐにそれを放棄するシェルスクリプトを使用して、偽造することはできます。そのスクリプトに「.command」拡張子を付けると、GUIでダブルクリックできるようになります。あまりエレガントではありませんが、それは仕事を成し遂げます。

しかし、それが言うように、あまりエレガントではなく、これがATMonitorのやり方だとは思いません。

私は この質問 を見つけました、そして彼らはそれを起動引数として行う方法を与えました、しかしそれを永続的な値として保存する明白な方法はありません。たとえば、launchdによってプログラムが開始されない場合です。

PIDに関係なく、実行可能バイナリごとに永続的なreniceレベルを設定するには、いつ、どのように、またはなぜ起動したのですか?

5
mralexgray

多くの調査の結果、プログラムを起動して再利用するAppleScriptを作成する方法を見つけました。また、管理者パスワード全体も処理します。 xxxxxxxxxを自分のパスワードに置き換えるだけです。私はこれをさまざまなプログラムで使用しましたが、すべてうまくいくようです。正直なところ、なぜ1秒の遅延を入れたのか思い出せません。プログラムが再開される前に、プログラムが開始されたことを確認したかっただけだと思います。このスクリプトにはバリエーションがあると確信しています。これの良いところは、アクティビティモニターを開いたり、プロセスIDを見つけたりする必要がないことです。このスクリプトは、これらすべてを自動的に実行します。各スクリプトをアプリケーションとして保存して起動するだけで、すべてがうまくいきます。ちなみに、私はatMonitorが大好きですが、突然システムがハングする傾向があると報告されています。 MacUpdateでレビューをご覧ください。


tell application "Safari"
    activate
    delay 1
end tell

tell application "System Events" to set unixID to unix id of process "Safari"
do Shell script ("renice -20 " & unixID) password "xxxxxxxxx" with administrator privileges
5
Tim

IPadは「電子機器」と見なされているため、このサイトではiPadに関する質問はトピックから外れています。 [〜#〜] faq [〜#〜] を参照してください。

Mac OS Xへの回答:

AtMonitorによって実行された変更は、実際には再起動の間に固執しません。これらは、アプリケーションとatMonitorの両方が再度実行されるときに再適用されます。 atMonitorを終了し、再接続されたアプリケーションを再起動すると、そのNice値は再び0になります(ps axlNice列を使用して確認してください)。したがって、この方法では、atMonitorを実行する必要があります。

それに加えて、実際のバイナリを直接実行できるため、たとえば、 /Applications/Firefox.app/Contents/MacOS/firefox-binの代わりにopen -a Firefoxは、実際にパッチを適用せずにアプリケーションの起動方法とは無関係にこの変更を行うことは不可能です。バイナリ自体(これは通常、非常に複雑なものと単純に不可能なものの間のどこかにあります)

私が説明したことを行うことができます ここ が、コマンドライン引数を渡す代わりに、Niceを介してアプリケーションを起動します。これは、open、Dockを使用して、アプリケーションバンドルをダブルクリックするなどして起動する限り、実際のアプリケーションと区別できません。実際のバイナリの名前を変更し、シェルスクリプトに元の名前を付けると( Info.plistを変更しないと、ハードコードされた呼び出しでもNiceスクリプトを通過します)。これにより、ユーザーは(現在は名前が変更された)バイナリを自分で起動できますが、それ以外にも機能します。

2
Daniel Beck