从 terminal/bash 关闭“<app> 意外退出”window

Close "<app> quit unexpectedly" window from terminal/bash

有没有办法从终端或 bash 脚本close/kill“ 意外退出”window?进程名称是什么?

(不接受 AppleScript 自动化解决方案。)

我不确定苹果是否有相同的核心实用程序,但我也来自 unix 世界。

例如:解决方案是通过名称查找进程 ID。在我的 linux 系统上,我可以使用以下命令查找进程 ID...

ps -aux

另一种变体是 top。两者都提供了大量信息,我必须使用 grep 过滤代码。 之后,我将通过 cutsed 过滤字符串。 最后但同样重要的是 kill 命令。

脚本应该看起来像这样...

#!/bin/sh
PNAME="< app> quit unexpectedly"
ps -aux | grep "$PNAME" | cut -d" " -f2 | kill

但请注意,如果您不知道如何使用此脚本,可能会造成巨大的损害。

老实说,我永远不会使用这样的东西,而是手动执行 kill..

您可以通过以下方式禁用它首先出现:

defaults write com.apple.CrashReporter DialogType none

其他可能的值是 developer(显示所有进程的堆栈跟踪)和 crashreport(默认值)。

这也意味着不会向 Console.app 写入任何条目。对话框本身由 UserNotificationCenter 显示,可以通过以下方式禁用(以及许多其他通知):

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.UserNotificationCenter.plist

一些上下文:

Mach 有一个概念异常端口。每个thread/process都有一个task、process和一个host exception port,发生异常时检查。 CrashReporter 守护程序注册主机异常端口并在没有其他信号处理程序时激活 运行。然后它创建进程的堆栈跟踪和内存映射,并指示 UserNotificationCenter 显示它。默认情况下,它只对 GUI 应用程序这样做。


在 High Sierra 上,我不得不使用 defaults write com.apple.CrashReporter -string "developer"

您可以:

killall UserNotificationCenter

它会杀死 UserNotificationCenter(它也打开了 windows),所以消息消失了。 (别担心,下一条错误消息会自动再次启动。)

但是,(恕我直言)最好以以下形式使用 osascript 命令:

osascript -l JavaScript <<EOS
... apple-scripting using JavaScript ...
EOS

恕我直言 JavaScript 比 "standard" applescript.

更容易理解(对于普通程序员)