「強制終了」より強力なものはありますか?


24

私は死ぬことのないアプリを持っています:それはドックから消えましたが、ウィンドウは残ります(マウスオーバーするとビーチボールが表示されます)。CPUを使用していませんが、消えて欲しいです。

実際にアプリを強制終了するために、「強制終了」より強力なものはありますか?


強力かどうかはわかりませんが、[アプリ]> [ユーティリティ]> [アクティビティモニター]を試してください。プロセスを見つけて、強制終了します。それでもうまくいかない場合は、プロセス番号をメモし、ターミナルに移動して「kill#」と入力します。#はプロセス番号です。HTH
デビッドDelMonte

6
電源ボタン?
ダニエル

1
@DanielLawson残念ながら、これらの状況は通常それをもたらします。
CajunLuke

1
David:Appleが「強制終了」と呼ぶものは、どのように到達しても同じだと思いますが、私もそれを試しましたが、効果はありません。
ケン

回答:


14

アプリの名前がわかっている場合は、アクティビティモニターでアプリがまだ実行されているかどうかを確認し、強制終了を試すことができます。それでも解決しない場合は、アプリのプロセスID(pid)をメモします。ターミナルに移動して、kill [pid]「[pid]」を先ほどメモした番号に置き換えて入力します。それが機能しない場合は、試してみてくださいkill -3 [pid]、それが機能しない場合kill -9 [pid]。プロセスは、(これはそうではない)別のユーザーによって所有されている場合は、交換する必要があるかもしれないkillsudo kill、プロンプトが表示されたら、パスワードを入力します。

アプリがアクティビティモニターに表示されないkill、または表示できなかった場合、ウィンドウはどこかに残ったままである可​​能性があり、アプリは単に実行されていません。この場合、時々(常にではありませんが)killall SystemUIServerまたはに機能しkillall Dockます。

これらのいずれも機能しない場合は、ログアウトして再度ログインするか、再起動する必要があります。この時点までに何度か行ったが、アプリが非常にスタックしているため、ログアウトまたはシャットダウンできなかったため、ハードリブートする必要がありました。


変更をせずに、これらすべてを試しました(sudoプロセスは私が所有していてもを含む)。ウィルkillall SystemUIServerウィンドウの位置を忘れるように、私の他の開いているアプリケーションのいずれかに影響を与えますか?
ケン

2
gentmatt:によればkill -l、-3はSIGQUIT、-9はSIGKILL(「キャッチ不能、無視できないキル」)です。
ケン

1
@gentmatt 3は、プロセスにシグナルをインターセプトしてクリーンアップを実行する能力を与えるQUITシグナルです。9 is KILLは「キャッチ不能で無視できない」。送信できる他の信号の山があります。man killこれらをすべて表示するには、実行(これまでで最高のUNIXコマンドのトップ10に入っています)。
CajunLuke

1
私は通常-9を殺します。-3「強制終了」よりも強くありません
セグメンテーションフォルト

3
@BoTian True; -9までまっすぐスキップします。強制終了をまったく気にしないこともあります。しかし、自分が何をしているのかわからないユーザーにとっては、機能する可能性があり、有害である可能性は低くなります。また、それほど長くはかからないため、期待される結果の比率に費やされる時間はそれほど悪くありません。
CajunLuke

7

強制終了ウィンドウ、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動作しない場合でも、アプリはおそらく無停止のスリープ状態にあり、実際には何も実行できません(再起動を行わない)。
ブラックライトシャイニング

これがmail.appやpages.appのようなユーザーアプリなのか、Spotlightのようなシステムプロセスなのか、Plexのようなアプリバックグラウンドプロセスなのか(削除するのに苦労している)だけなのかと思います。
デビッドデルモンテ

6

Force Quit、Activity Monitor、killおよびその他の方法が機能せず、そのためにMacをシャットダウンできなかった状況がありました。

この場合、sudo shutdown -r now他に何もしないときに機能し、おそらく電源ボタンでハードシャットダウンを行うよりも優れています。


1

上記の回答のように、プロセスを終了する最も強力な方法はSIGKILL、たとえばkill -9 process_idです。

ただし、単に不可能なプロセスは存在しForce Quitませんkillzombieプロセスと呼ばれます。

zombie2分間プロセスを作成する短いスクリプトを次に示します。

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秒でクリアされます。


0

これはあなたがすべきことです:

  1. アクティビティモニターで、プロセスをダブルクリックするか、情報アイコンをクリックしてプロセスのウィンドウを開きます。
  2. プロセス番号は、Process Group行にprocessName(####)として表示されます。「####」はプロセスの番号です。
  3. ターミナルを開き、引用符なしで「sudo kill ####」と入力し、Enterキーを押します
  4. パスワードを入力すると、ターミナルはここに入力を表示しません
  5. プロセスは強制終了されます。

このようなプロセスは、アンインストールを試みる場合、セーフモードで削除するのが最適です。

乾杯、ブライアン

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.