私は死ぬことのないアプリを持っています:それはドックから消えましたが、ウィンドウは残ります(マウスオーバーするとビーチボールが表示されます)。CPUを使用していませんが、消えて欲しいです。
実際にアプリを強制終了するために、「強制終了」より強力なものはありますか?
私は死ぬことのないアプリを持っています:それはドックから消えましたが、ウィンドウは残ります(マウスオーバーするとビーチボールが表示されます)。CPUを使用していませんが、消えて欲しいです。
実際にアプリを強制終了するために、「強制終了」より強力なものはありますか?
回答:
アプリの名前がわかっている場合は、アクティビティモニターでアプリがまだ実行されているかどうかを確認し、強制終了を試すことができます。それでも解決しない場合は、アプリのプロセスID(pid)をメモします。ターミナルに移動して、kill [pid]
「[pid]」を先ほどメモした番号に置き換えて入力します。それが機能しない場合は、試してみてくださいkill -3 [pid]
、それが機能しない場合kill -9 [pid]
。プロセスは、(これはそうではない)別のユーザーによって所有されている場合は、交換する必要があるかもしれないkill
とsudo kill
、プロンプトが表示されたら、パスワードを入力します。
アプリがアクティビティモニターに表示されないkill
、または表示できなかった場合、ウィンドウはどこかに残ったままである可能性があり、アプリは単に実行されていません。この場合、時々(常にではありませんが)killall SystemUIServer
またはに機能しkillall Dock
ます。
これらのいずれも機能しない場合は、ログアウトして再度ログインするか、再起動する必要があります。この時点までに何度か行ったが、アプリが非常にスタックしているため、ログアウトまたはシャットダウンできなかったため、ハードリブートする必要がありました。
sudo
プロセスは私が所有していてもを含む)。ウィルkillall SystemUIServer
ウィンドウの位置を忘れるように、私の他の開いているアプリケーションのいずれかに影響を与えますか?
kill -l
、-3はSIGQUIT、-9はSIGKILL(「キャッチ不能、無視できないキル」)です。
man kill
これらをすべて表示するには、実行(これまでで最高のUNIXコマンドのトップ10に入っています)。
強制終了ウィンドウ、killall
およびkill
すべての送信プロセスは、デフォルトでTERMシグナルを送信します。killall -kill
それが機能しない場合に使用できます。
killallユーティリティは、kill(1)で行われるpidによる選択とは対照的に、名前で選択されたプロセスを強制終了します。デフォルトでは、procallという名前に一致するkillallの呼び出し元と同一の実UIDを持つすべてのプロセスにTERMシグナルを送信します。スーパーユーザーは、任意のプロセスを強制終了できます。
sudo dtrace -n 'proc:::signal-send /pid/ { printf("%s -%d %d",execname,args[2],args[1]->pr_pid); }'
強制終了ウィンドウからアプリケーションを実行して終了すると、通常、信号は-15(TERM)として表示されます。ただし、アクティビティモニターからバックグラウンドプロセス(またはDockに表示されないアプリケーション)を終了すると、信号は通常-9(KILL)と表示されます。
SIGTERMは、killコマンドまたはkillallコマンドによってプロセスに送信されるデフォルトのシグナルです。プロセスの終了を引き起こしますが、SIGKILLシグナルとは異なり、プロセスによってキャッチおよび解釈(または無視)できます。したがって、SIGTERMは、プロセスの正常な終了を要求することに似ており、ファイルのクリーンアップとクローズを許可します。このため、シャットダウン中の多くのUnixシステムでは、initは電源を切るのに不可欠ではないすべてのプロセスにSIGTERMを発行し、数秒間待機してから、SIGKILLを発行して残っているプロセスを強制終了します。
SIGKILL
動作しない場合でも、アプリはおそらく無停止のスリープ状態にあり、実際には何も実行できません(再起動を行わない)。
上記の回答のように、プロセスを終了する最も強力な方法はSIGKILL
、たとえばkill -9 process_id
です。
ただし、単に不可能なプロセスは存在しForce Quit
ませんkill
。zombie
プロセスと呼ばれます。
zombie
2分間プロセスを作成する短いスクリプトを次に示します。
perl -e 'if($p=fork) {print "unkillable pid:$p\n" ;system("ps -l"); sleep(120)}'
ターミナルで上記のスクリプトを実行すると、次のような出力が得られます。
unkillable pid:50571
UID PID PPID F CPU PRI NI SZ RSS WCHAN S ADDR TTY TIME CMD
501 47380 47379 4006 0 31 0 2448416 2900 - S 0 ttys000 0:00.36 -bash
501 50570 47380 4006 0 31 0 2443512 1424 - S+ 0 ttys000 0:00.01 perl -e if($p=fork) {print "u
#THIS-> 501 50571 50570 2006 0 0 0 0 0 - Z+ 0 ttys000 0:00.00 (perl)
501 12795 12794 4006 0 31 0 2448296 1752 - S+ 0 ttys001 0:00.75 -bash
501 50123 50122 4006 0 31 0 2448296 2688 - S+ 0 ttys002 0:00.14 -bash
強制終了できないプロセス(この場合は50571)のステータス列を確認すると、Z
フラグwhats meanが表示されzombie
ます。
任意のkill
シグナル(例:)を送信しようとしてもkill -9 50571
、プロセスは引き続き存在します。とにかく、それは実際には存在しないため、システムに大きな影響を与えません。プロセステーブルのみを占有します。
上記の例では、120秒でクリアされます。
これはあなたがすべきことです:
このようなプロセスは、アンインストールを試みる場合、セーフモードで削除するのが最適です。
乾杯、ブライアン