本地操作对试图超过控制值的进程执行。对于为资源控制设定的每个阈值,您都可以关联一个或多个操作。有三种类型的本地操作: none、deny 和 signal=。这三种操作按以下方式使用:
对于请求数量大于阈值的资源请求不执行任何操作。在不影响应用程序进度的情况下监视资源的使用情况时,此操作非常有用。虽然超过阈值的进程不会受到影响,但是您还可以启用在超过资源控制时显示的全局消息。
您可以拒绝请求数量大于阈值的资源请求。例如,如果新的进程超过控制值,则带有操作 deny 的 task.max-lwps 资源控制会导致 fork 系统调用失败。请参见 fork(2) 手册页。
您可以在超过资源控制时启用全局信号消息操作。当超过阈值时,会向进程发送信号。如果进程占用了其他资源,则不会发送其他信号。表 6–3 中列出了可用的信号。
并非所有的操作都可应用于每个资源控制。例如,某个进程的 CPU 份额数不能超过为其所属的项目指定的 CPU 份额数。因此,不允许对 project.cpu-shares 资源控制执行拒绝操作。
由于存在实现限制,因此,每个控制的全局属性可以限制可对阈值设置的可用操作的范围。(请参见 rctladm(1M) 手册页。)下表列出了可用信号操作。有关信号的其他信息,请参见 signal(3HEAD) 手册页。
表 6–3 可用于资源控制值的信号
信号 |
说明 |
说明 |
---|---|---|
SIGABRT |
终止进程。 |
|
SIGHUP |
发送挂起信号。当载波在断开的线路上停止时出现。发送给控制终端的进程组的信号。 |
|
SIGTERM |
终止进程。由软件发送的终止信号。 |
|
SIGKILL |
终止进程并中止程序。 |
|
SIGSTOP |
停止进程。作业控制信号。 |
|
SIGXRES |
超过了资源控制限制。由资源控制功能生成。 |
|
SIGXFSZ |
终止进程。超过了文件大小限制。 |
仅可用于具有 RCTL_GLOBAL_FILE_SIZE 属性的资源控制 (process.max-file-size)。有关更多信息,请参见 rctlblk_set_value(3C)。 |
SIGXCPU |
终止进程。超过了 CPU 时间限制。 |
仅可用于具有 RCTL_GLOBAL_CPUTIME 属性的资源控制 (process.max-cpu-time)。有关更多信息,请参见 rctlblk_set_value(3C)。 |