integer*4 function signal(signum, proc, flag) integer*4 signum, flag external proc
对于 64 位环境: integer*8 function signal(signum, proc, flag) integer*8 flag integer*4 signum external proc
针对 64 位环境进行编译时(使用编译器选项 -m64),proc 和 flag 必须声明为 integer*8, 从 signal 接收结果的任何变量也是如此。
如果某个进程引发了一个信号(请参见 signal(3C)),则缺省操作通常为清理和中止。可以选择写入替代信号处理例程。调用 signal 是向系统指定此替代操作的方式。
输入:
signum 是信号编号(请参见 signal.h(3HEAD))。proc 是用户信号处理例程的名称。如果 flag 是负值,则 proc 必须是用户信号处理例程的名称。如果 flag 是零或正值,则忽略 proc,并将 flag 的值作为信号操作定义传递到系统。需要特别指出的是,这是恢复以前保存的信号操作的方式。flag 的两个可能值具有特定的含义:
0 means "use the default action." See NOTES below. 1 means "ignore this signal."
输出:
返回的正值是以前的操作定义。大于 1 的值是发生指定信号时要调用的例程的地址。返回的负值是对系统错误代码取反的结果。请参见 perror (3F) 。可在后续对 signal 的调用中使用该返回值来恢复以前的操作定义。
libfui.a、libfui.so。
kill (1) 、 kill (3F) 、 perror (3F) 、 signal (3C)
如果在 64 位环境中需要负的 flag 值,可在对 signal 的调用中使用 INTEGER*8 文字值 -1_8。
如果调用了用户信号处理程序,则以整数参数形式传递信号编号。
如果在设置了高位的地址上装入了以 flag 形式传递到此函数的函数代码,则此函数可能会失败。在需要正值行为的情况下,会将此解释为 flag 的负值。在 64 位环境中或者在使用静态链接的代码时,不太可能发生这种情况。
在 Linux 系统上,signal() 手册页在手册页第 2 部分,信号编号在第 7 部分。