我知道我可以做ps -aux | xargs kill
等等,但我想列出所有没有响应的任务的 PID(活动监视器中的红色我可以在终端中执行什么命令来列出这些红色、无响应的任务并自动终止它们。
答案1
有人已经问过同样的问题如何确定应用程序是否没有响应?(确定哪些进程没有响应是困难的部分,杀死它们很容易)。我在这里引用了一个相关的答案:
“无响应”状态不是进程状态,而是进程已停止与窗口管理器/图形引擎通信。它可能被绑定在循环中,挂在套接字、远程文件上,或任何使其返回处理事件的主循环的东西上。窗口管理器注意到事件正在排队,因此将其标记为“无响应”
您可能需要编写一个小型的 X11 程序,向该进程发送虚拟事件,然后在该进程没有响应时将其终止。
因此,不可能准确确定哪些程序没有响应,至少在没有大量依赖 AppleScript/X11 逻辑的情况下是不可能确定的。
如果你好奇的话,这个 AppleScript 小片段(为 Mavericks 制作,可能无法在其他任何东西上使用)也发布在链接线程上,基本上可以识别所有无响应的程序,然后向KILL
它们发送信号:
tell application "Activity Monitor" to run --We need to run Activity Monitor
tell application "System Events" to tell process "Activity Monitor"
tell radio button 1 of radio group 1 of group 1 of toolbar 1 of window 1 to click --Using the CPU View
tell outline 1 of scroll area 1 of window 1 -- working with the list
set notResponding to rows whose value of first static text contains "Not Responding" -- Looking for Not responding process
repeat with aProcess in notResponding
set pid to value of text field 5 of aProcess -- For each non responding process retrieve the PID
if pid is not "" then do shell script ("kill -9 " & pid) -- KILL the PID.
end repeat
end tell
end tell
但是,如果您确定了某个应用程序正在运行,则可以使用 终止其所有实例sudo killall [AppName]
,例如sudo killall "Activity Monitor"
。您可以使用 确定各个应用程序的 PID pgrep [AppName]
,例如pgrep "Google Chrome"
,并且可以使用 终止任何生成的 PID kill [PID]
。
答案2
虽然有点晚了,但我已经编写了一个终端应用程序来为您完成此操作。它绕过了对活动监视器进行 UI 脚本编写的需要,而是使用 spindump 报告来确定无响应的进程并自动终止它们。
答案3
它在我的 Jenkins OSX 机器上让我很烦,似乎有什么东西偶尔会堵塞我的系统。为了能够更好地了解任何问题的详细信息。我会尝试这个,感谢 @coldlogic 提出使用 spindump 的想法!
$ sudo spindump -notarget 5 -timelimit 60 -stdout -noFile -noProcessingWhileSampling -aggregateStacksByProcess | grep -B 8 "Unresponsive for"
Sampling all processes for 5 seconds with 10 milliseconds of run time between samples
Sampling completed, processing symbols...
Process: System Preferences [31152]
Path: /Applications/System Preferences.app/Contents/MacOS/System Preferences
Architecture: x86_64
Parent: launchd [1]
UID: 982457465
Task size: 38.81 MB (-20 KB)
CPU Time: <0.001s (263.8K cycles, 65.8K instructions, 4.01c/i)
Note: Unresponsive for 2258 seconds before sampling
今天我能够重现导致 Sys prefs 挂起的情况,因此我能够将其用作测试。希望这对未来的我或其他人有所帮助!
答案4
感谢 coldlogic。我编写了一个终端应用程序来终止 macos 上无响应的进程。(swift,在 10.12+ 上运行良好)