UNIX
信号处理错误 — 描述了一些函数,可帮助从进程接收信号时可能发生的失败系统调用中恢复。尽管可以使用 $ZF Callout Interface
调用几乎任何例程,但它最适合用于数学函数。它还可以有效地用作 IRIS I/O
无法很好处理的外部设备的接口,或者用于 IRIS
接口不存在的某些系统服务。
以下操作可能会导致严重问题:
内存访问违规将由 IRIS
处理,并将被视为 IRIS
中的错误。
由陷阱处理的错误(例如大多数平台上的除零错误)也将被视为 IRIS
中的错误。
IRIS
需要与运行 IRIS
的其他进程进行交互。降低优先级和提高优先级一样糟糕。例如,假设进程在放弃 CPU
之前获取了自旋锁保护的资源。如果优先级太低,其他具有更高优先级的进程可能会争夺资源,从而有效地阻止进程运行,从而释放自旋锁。
可以非常简单地屏蔽中断以实现自己的互锁,但应该非常小心,不要在任何时间段内都屏蔽中断。
可以打开文件并使用 malloc
分配内存,因为这些资源将在进程终止时关闭或释放。如果创建第二个线程,则无法保证第二个线程会在 IRIS
进程退出之前正常退出,因此不要创建第二个线程。
ObjectScript
代码返回非不透明对象不要在代码中分配内存块并期望能够使用 $VIEW(address,?3,size)
来读取它。另外,不应该将 malloc
块传递回非 ObjectScript
代码。代码应该返回一个不透明句柄,稍后当它收到一个不透明句柄时,它应该在使用它之前验证它是否有效。
永远不应该只调用 exit
。始终返回 ZF_SUCCESS
或 ZF_FAILURE
(请记住,这些值的实现在 IRIS
平台之间有所不同)。
exec
的任何变体退出可以 fork
然后在子进程中调用 exec
,但请务必确保父进程始终返回 IRIS
,而子进程永远不会返回 IRIS
。
与 Windows
不同,UNIX
系统仅允许为当前帧和内部帧建立本地错误处理。