# 服务器信号函数
服务器信号函数向其他服务器线程发送控制信号。仅系统管理员有权执行以下函数。
- pg_cancel_backend(pid int) 描述：取消一个后端线程正在执行的语句。
  返回值类型：Boolean
  备注：pg_cancel_backend向由pid标识的后端线程发送一个查询取消（SIGINT）信号。一个活动的后端线程的PID可以从PG_STAT_ACTIVITY视图（请参见[PG_STAT_ACTIVITY](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/gaussdb-08-1334.html)）的pid字段找到，或者在服务器上用ps列出数据库线程。具有SYSADMIN权限的用户，后端线程所连接的数据库的属主，后端线程的属主或者继承了内置角色gs_role_signal_backend权限的用户有权使用该函数。
  
- pg_cancel_session(pid bigint, sessionid bigint) 描述：线程池模式下，取消一个活跃状态会话正在执行的语句。
  返回值类型：Boolean
  备注：pg_cancel_session的入参可以通过pg_stat_activity中的pid字段和sessionid的字段查询，可以取消线程池模式下，活跃状态会话正在执行的语句。当入参pid和sessionid相同，且均为线程id时，功能和pg_cancel_backend相同。
  
- pg_cancel_invalid_query() 描述：取消一个后端的无效查询。
  返回值类型：Boolean
  备注：只有系统管理员才有权限取消连接到降级的GTM的后端中运行的查询。
  
- pg_reload_conf() 描述：该函数向服务器发送一个SIGHUP信号，触发所有服务器线程重新加载配置文件。
  返回值类型：Boolean
  
- pg_rotate_logfile() 描述：滚动服务器的日志文件。
  返回值类型：Boolean
  备注：pg_rotate_logfile给日志文件管理器发送信号，使之立即切换到一个新的输出文件。这个函数只有在redirect_stderr用于日志输出的时候才有用，否则不会产生日志文件管理器子线程。
  
- pg_terminate_session(pid bigint, sessionid bigint) 描述：线程池模式下，终止一个后台会话。
  返回值类型：Boolean
  备注：本函数的入参可以通过pg_stat_activity中的pid字段和sessionid的字段查询。具有SYSADMIN权限的用户、会话所连接的数据库的属主、会话的属主或者继承了内置角色gs_role_signal_backend权限的用户有权使用该函数。若执行该函数后未成功终止目标会话，则会强制关闭该会话和客户端的socket连接。
  ![](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/public_sys-resources/notice_3.0-zh-cn.png)
  - 该函数根据入参pid与sessionid的关系区分两种执行模式，具体说明如下：
    - 参数相同时（pid=sessionid，且为线程id），此时函数按线程粒度执行终止操作，支持终止非线程池线程、活跃状态的线程池线程；不支持终止非活跃状态的线程池线程。
    
    - 参数不同时（pid ≠ sessionid），此时函数按会话粒度执行终止操作，支持终止活跃状态的会话，清理非活跃状态会话以及清理其对应的客户端socket连接。
     
  
  - 在以下场景中，执行该函数可能无法保证立即终止目标线程或会话：
    - 线程或会话正处于等待锁的状态。
    
    - 因硬件故障（如存储异常、网络中断、资源不可用等）导致线程或会话阻塞或无响应。
    
    - 会话处于网络 I/O（如 recv/send）状态。
    
    - 系统CPU负载高、线程池满场景下，会话处于idle状态。
     
    
- pg_terminate_active_session_socket(pid int64, sessionid int64) 描述：关闭一个活跃session和客户端的socket连接。
  返回值类型：Boolean
  备注：如果成功，函数返回true，否则返回false。具有SYSADMIN权限的用户，后端线程所连接的数据库的属主，后端线程的属主或者继承了内置角色gs_role_signal_backend权限的用户有权使用该函数。
  
- pg_terminate_backend(pid int) 描述：终止一个后端线程。仅系统管理员和线程所有者可执行该函数。
  返回值类型：Boolean
  备注：如果成功，函数返回true，否则返回false。具有SYSADMIN权限的用户，后端线程所连接的数据库的属主，后端线程的属主或者继承了内置角色gs_role_signal_backend权限的用户有权使用该函数。若执行该函数后未成功终止目标会话，则会强制关闭该会话和客户端的socket连接。
  ![](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/public_sys-resources/notice_3.0-zh-cn.png)
  - 该函数支持终止非线程池线程及处于活跃状态的线程池线程，但无法对处于非活跃状态的线程池线程执行终止操作。
  
  - 在以下场景中，执行该函数可能无法保证立即终止目标线程：
    - 线程正处于等待锁的状态。
    
    - 因硬件故障（如磁盘异常、资源不可用等）导致线程阻塞或无响应。
     
   
  示例：
  ```
  gaussdb=# SELECT pid from pg_stat_activity;
         pid       
  -----------------
   140657876268816
  (1 rows)
  gaussdb=# SELECT pg_terminate_backend(140657876268816);
   pg_terminate_backend 
  ----------------------
   t
  (1 row)
  ```
  
- gs_cancel_invalid_gtm_query(cstring) 描述：断开与指定地址的GTM连接的所有会话。函数参数为逗号分隔的字符串，分隔后的每个子串格式为IP\[:port\]（中括号表示可选）。
  返回值类型：void
  备注：只有系统管理员才有权限执行该函数。该函数仅由CM组件在特定流程中自动调用，不建议用户手动进行调用。
  
- terminate_session_has_temp_file() 描述：中断所有正在打开临时文件的会话。
  返回值类型：void
  备注：仅系统管理员有权限执行该函数。该函数仅由CM组件在特定流程中自动调用，不建议用户手动进行调用。
  
 
