从终端/ bash关闭“<app>意外退出”窗口

时间:2017-02-21 19:31:03

标签: bash macos macos-sierra

有没有办法从终端或bash脚本关闭/终止“&lt; app&gt;意外退出”窗口?流程名称是什么?

(AppleScript自动化解决方案不可加入。)

3 个答案:

答案 0 :(得分:3)

您可以通过以下方式禁用它:

defaults write com.apple.CrashReporter DialogType none

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

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

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

某些背景信息:

Mach具有异常端口的概念。每个线程/进程都有一个任务,进程和一个主机异常端口,在发生异常时会对其进行检查。 CrashReporter守护程序注册主机异常端口,并在没有其他信号处理程序运行时被激活。然后,它创建进程的堆栈跟踪和内存映射,并指示UserNotificationCenter显示它。默认情况下,它仅对GUI应用程序执行此操作。

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

答案 1 :(得分:1)

你可以:

killall UserNotificationCenter

它会杀死UserNotificationCenter(它也打开了所有窗口),因此消息消失了。 (别担心,下一条错误消息将自动重新启动。)

但是,(恕我直言)最好在表单中使用osascript命令:

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

恕我直言JavaScript(对于普通程序员)更容易理解为&#34;标准&#34; applescript

答案 2 :(得分:-1)

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

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

ps -aux

另一种变体是顶部。两者都提供了大量信息,我必须使用 grep 过滤代码。 之后我会通过 cut sed 过滤字符串。 最后但并非最不重要的是 kill 命令。

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

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

但要注意,如果你不知道如何使用它,这个脚本会造成巨大的破坏。

我要永远不要使用这样的东西,而是手动执行 kill