使用POSIX信号以老式方式对Mac Apps进行故障排除

在活动监视器中,有一个用于发送信号进行处理的隐秘菜单选项。您是否想知道那是什么?如果选择它,您会看到诸如 SIGINT SIGHUP 之类的晦涩术语,这些术语并不能完全清除。那么这些信号到底是什么呢?

这些信号是macOS核心的Unix基础的结果。终端内置了以下信号:当您按下 Ctrl + C 来停止正在运行的命令时,您正在发送进程 SIGINT 来中断并停止当前正在运行的命令。它们是应用程序可以相互通信的最早方式之一,并且是旧的``便携式操作系统接口''(POSIX)标准的一部分。

虽然很容易理解系统工作原理的基础,还可以使用这些信号来捕获有关行为不当的应用程序的信息。

什么是POSIX?

POSIX是Unix和类似Unix操作系统的基础标准。在这些兼容系统中,有macOS,它与Unix兼容。它的核心是Darwin,这是一个Unix内核,其根源可以追溯到NeXTSTEP。这本身就是BSD(原始Unix变体之一)的分支。

POSIX确保所有这些操作系统以预期的方式处理代码,使开发人员可以知道他们的代码是真正可移植的。当他们在另一台机器上将这些信号之一发送到某个进程时,他们返回的数据采用他们可以预期和处理的格式。这是对大约40年计算历史的粗略简化,但您了解了总的思路。

与构成macOS的Unix基础的最基本的守护程序进行通信时,这些信号是最好的。守护程序是后台进程,它们运行计算机的基本要素或macOS常用的服务。臭名昭著的发现就是一个例子。这是 mDNSResponder 的OS X Yosemite 10.10替代,后者是该更新中的网络问题。

取决于应用程序设计为接收信号的方式,您可以发送信号退出应用程序以创建所谓的核心转储。核心转储包含有关正在运行的程序的所有当前数据。这些对于不断崩溃的应用程序进行故障排除至关重要。在Mac上,这些文件以Mach-O文件格式转储,您可以在名为Xcode的macOS开发环境中阅读。大多数用户可能不会做很多事情,但是如果您对应用程序问题感到沮丧,他们可能会很有帮助将其发送给开发人员以寻求支持。

还有一些经典计算可以证明其根源这里。 Mach-O文件格式与Mach微内核共享其名称。与BSD一起,这是macOS根目录的一部分,而这两者是基础内核XNU的一部分。 Mach不像BSD那样有故事,因此它并没有引起广泛的关注,但是它是使Apple操作系统与其他Unix变体区分开来的一部分。

那我该如何使用它们?

我们以前都去过那里:您对某个应用程序进行了更新或下载了一个新应用程序,并且每次打开它都会挂起。您从Apple菜单中打开强制退出,然后看到该应用程序显示为无响应。更糟糕的是,这是一些后台进程将您的系统拖到下面。

打开活动监视器,然后单击没有响应的进程。然后转到查看菜单,然后选择发送信号进行处理。将会弹出一个菜单,允许您选择要发送到进程的信号,然后选择 Send (发送)。

如果您喜欢Terminal,则可以使用命令已经很熟悉了。 kill 命令用于停止进程。如果添加 -s ,则可以添加数字以向正在杀死的进程发送信号。以下是 kill 手册页中常用命令列表的列表:

  • 1 — HUP(挂断)
  • 2 — INT(中断) )
  • 3-退出(退出)
  • 6-逃跑(中止)
  • 9-杀死(不可捕捉,不可忽略的杀戮)
  • 15 — TERM(软件终止信号)
  • 您还可以发送其他一些信号,这只是最常见的一种。这里有完整的代码列表。

    何时使用它们?

    现在您知道如何处理POSIX信号了,您可以使用它们来阻止挂起干净地处理。公平地说,您不会每天都使用这些代码。当与开发人员一起处理奇怪的应用程序崩溃或帮助您的系统管理员Beta测试公司的内部应用程序时,这些代码可以帮助获取他们所需的信息。

    如果应用程序被编码为创建这些转储您将在目录 / cores 中找到它们,从而使该目录易于获取崩溃或挂起的应用程序的数据。您可以使用 ls -a 命令在此处检查并查看目录中有哪些转储。这将向您显示该目录中的所有文件,然后可以通过 mv文件名目标位置命令将它们复制到更易于访问的目录中。

    终端中使用命令cd / cores 切换到目录,然后使用 ls -a 列出内容。要将文件移动到Documents文件夹中,只需使用 mv filename / Users / username / Documents (替换 filename username )。

    如果您是迁移到Mac的Unix长期用户,那么还有哪些其他鲜为人知的功能?如果您有兴趣检出仅使用macOS开源基础的项目,请检出PureDarwin。让我们知道评论中的结果。我们还想听听POSIX信号何时解决了Mac上的顽固问题。

    您以前是否曾使用POSIX信号进行故障排除?

    图片来源:Dean Drobot / Shutterstock

    标签: 命令提示符 macOS Sierra Terminal Unix