是否有比“强制戒烟”更强的东西?


24

我有一个不会死的应用程序:它已经从基座上消失了,但是窗口仍然存在(如果我将鼠标悬停在上面,还有一个沙滩球)。它没有使用CPU,但我希望它消失。

是否有比“强制退出”更强大的功能才能真正杀死应用程序?


我不确定它是否更强大,但是尝试“应用程序”>“实用程序”>“活动监视器”。找到该过程,然后强制退出。如果这不起作用,请记下进程号,转到终端并键入“ kill#”,其中#是进程号。HTH
David DelMonte 2012年

6
电源按钮?
丹尼尔

1
@DanielLawson不幸的是,这些情况通常会导致这种情况。
CajunLuke 2012年

1
戴维:我认为无论您如何使用,苹果所说的“强制退出”都是一样的,但是我也尝试过,没有任何效果。
2012年

Answers:


14

如果您知道该应用程序的名称,则可以在活动监视器中查看它是否仍在运行,然后尝试强制退出。如果这不起作用,请记下该应用的进程ID(pid)。转到终端并输入kill [pid],用您之前记下的数字替换“ [pid]”。如果那不起作用,请尝试kill -3 [pid],如果那不起作用kill -9 [pid]。如果该进程由另一个用户拥有(这不太可能),则可能需要替换killsudo kill并在提示时输入密码。

如果该应用程序未显示在“活动监视器”中或您无法显示kill,则该窗口可能是残留在其他地方的窗口,并且该应用程序不再运行。在这种情况下,有时(并非总是)它可以工作于killall SystemUIServerkillall Dock

如果这些都不起作用,则必须注销并重新登录或重新启动。到现在为止,有几次,应用程序被卡住了,以至于无法注销或关闭,因此我不得不硬重启。


我尝试了所有这些操作(包括sudo,即使该过程是我所有,也包括在内),没有任何更改。会killall SystemUIServer影响我其他任何打开的应用程序,例如忘记窗口位置吗?
2012年

2
gentmatt:根据kill -l,-3是SIGQUIT,而-9是SIGKILL(“不可捕获,不可忽略的杀戮”)。
2012年

1
@gentmatt 3是QUIT信号,它使进程能够拦截该信号并执行清除。9是KILL是“不可捕获且不可忽略的”。您还可以发送其他信号。运行man kill(这是有史以来十大最佳UNIX命令中的内容)以查看所有内容。
CajunLuke 2012年

1
我通常只是杀死-9。-3不比“强制退出”更强大
segfault 2012年

3
@BoTian True; 我直接跳到-9。有时我根本不去强迫戒烟。但是对于不知道自己在做什么的用户,它可以工作并且有害的可能性较小。它也不需要很长的时间,因此花费在预期结果比率上的时间并不是很糟糕。
CajunLuke 2012年

7

强制退出窗口,killall并且kill默认情况下所有发送过程都发送TERM信号。killall -kill如果不行,可以使用。

killall实用程序杀死按名称选择的进程,而不是像kill(1)那样按pid进行选择。默认情况下,它将向所有进程发送一个TERM信号,该进程的真实UID与killall的调用者相同,且与名称procname匹配。超级用户被允许杀死任何进程。

如果您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强制终止任何剩余的此类进程。


这里有一些很好的信息,但是这些杀死进程的变体似乎都没有对它产生任何影响。
2012年

如果无法SIGKILL正常运行,则该应用可能处于不间断的睡眠状态,实际上您无能为力(除非重新启动)。
Blacklight Shining

也只是想知道这是否是用户应用程序(例如mail.app或pages.app),还是某种程度上是系统进程(例如Spotlight)还是应用程序后台进程(例如Plex)(我很难删除)。
戴维·德尔蒙特

6

我遇到过强制退出,活动监视器kill和其他方法不起作用的情况,因此我的Mac无法关机。

在这种情况下,这种方法可以sudo shutdown -r now在其他任何事情都无法解决的情况下起作用,并且可能比通过电源按钮进行硬关机更好。


1

如上述答案所示,终止任何进程的最有效方法是SIGKILL例如kill -9 process_id

然而,有哪些是根本不可能的过程Force Quit也不是kill。他们称之为zombie流程。

这是一个简短的脚本,它将创建一个zombie两分钟的过程:

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标志,表示什么意思zombie

您可以尝试发送任何kill信号(例如kill -9 50571),并且该过程仍然存在。无论如何,它不会对您的系统造成太大伤害,因为它实际上并不存在-仅占用进程表。

在上面的示例中,将在120秒内将其清除。


0

这是您应该做的:

  1. 在活动监视器中,双击该过程,或者单击“信息”图标以打开该过程的窗口。
  2. 您将在“进程组”行中看到进程#为processName(####),其中“ ####”是您的进程编号。
  3. 打开终端并输入不带引号的“ sudo kill ####”,然后按Enter
  4. 输入密码,终端将不会在此处显示您的输入
  5. 进程被杀死。

如果要尝试进行卸载,最好在安全模式下删除此类过程。

干杯,布莱恩

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.