PostgreSQL Source Code git master
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
interrupt.c
Go to the documentation of this file.
1/*-------------------------------------------------------------------------
2 *
3 * interrupt.c
4 * Interrupt handling routines.
5 *
6 * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
7 * Portions Copyright (c) 1994, Regents of the University of California
8 *
9 * IDENTIFICATION
10 * src/backend/postmaster/interrupt.c
11 *
12 *-------------------------------------------------------------------------
13 */
14
15#include "postgres.h"
16
17#include <unistd.h>
18
19#include "miscadmin.h"
21#include "storage/ipc.h"
22#include "storage/latch.h"
23#include "storage/procsignal.h"
24#include "utils/guc.h"
25#include "utils/memutils.h"
26
27volatile sig_atomic_t ConfigReloadPending = false;
28volatile sig_atomic_t ShutdownRequestPending = false;
29
30/*
31 * Simple interrupt handler for main loops of background processes.
32 */
33void
35{
38
40 {
41 ConfigReloadPending = false;
43 }
44
46 proc_exit(0);
47
48 /* Perform logging of memory contexts of this process */
51
52 /* Publish memory contexts of this process */
55}
56
57/*
58 * Simple signal handler for triggering a configuration reload.
59 *
60 * Normally, this handler would be used for SIGHUP. The idea is that code
61 * which uses it would arrange to check the ConfigReloadPending flag at
62 * convenient places inside main loops, or else call ProcessMainLoopInterrupts.
63 */
64void
66{
69}
70
71/*
72 * Simple signal handler for exiting quickly as if due to a crash.
73 *
74 * Normally, this would be used for handling SIGQUIT.
75 */
76void
78{
79 /*
80 * We DO NOT want to run proc_exit() or atexit() callbacks -- we're here
81 * because shared memory may be corrupted, so we don't want to try to
82 * clean up our transaction. Just nail the windows shut and get out of
83 * town. The callbacks wouldn't be safe to run from a signal handler,
84 * anyway.
85 *
86 * Note we do _exit(2) not _exit(0). This is to force the postmaster into
87 * a system reset cycle if someone sends a manual SIGQUIT to a random
88 * backend. This is necessary precisely because we don't clean up our
89 * shared memory state. (The "dead man switch" mechanism in pmsignal.c
90 * should ensure the postmaster sees this as a crash, too, but no harm in
91 * being doubly sure.)
92 */
93 _exit(2);
94}
95
96/*
97 * Simple signal handler for triggering a long-running background process to
98 * shut down and exit.
99 *
100 * Typically, this handler would be used for SIGTERM, but some processes use
101 * other signals. In particular, the checkpointer exits on SIGUSR2, and the WAL
102 * writer and the logical replication parallel apply worker exits on either
103 * SIGINT or SIGTERM.
104 *
105 * ShutdownRequestPending should be checked at a convenient place within the
106 * main loop, or else the main loop should call ProcessMainLoopInterrupts.
107 */
108void
110{
113}
#define SIGNAL_ARGS
Definition: c.h:1320
volatile sig_atomic_t LogMemoryContextPending
Definition: globals.c:41
volatile sig_atomic_t ProcSignalBarrierPending
Definition: globals.c:40
volatile sig_atomic_t PublishMemoryContextPending
Definition: globals.c:42
struct Latch * MyLatch
Definition: globals.c:64
void ProcessConfigFile(GucContext context)
Definition: guc-file.l:120
@ PGC_SIGHUP
Definition: guc.h:75
void SignalHandlerForShutdownRequest(SIGNAL_ARGS)
Definition: interrupt.c:109
void ProcessMainLoopInterrupts(void)
Definition: interrupt.c:34
volatile sig_atomic_t ShutdownRequestPending
Definition: interrupt.c:28
volatile sig_atomic_t ConfigReloadPending
Definition: interrupt.c:27
void SignalHandlerForConfigReload(SIGNAL_ARGS)
Definition: interrupt.c:65
void SignalHandlerForCrashExit(SIGNAL_ARGS)
Definition: interrupt.c:77
void proc_exit(int code)
Definition: ipc.c:104
void SetLatch(Latch *latch)
Definition: latch.c:288
void ProcessGetMemoryContextInterrupt(void)
Definition: mcxt.c:1436
void ProcessLogMemoryContextInterrupt(void)
Definition: mcxt.c:1384
void ProcessProcSignalBarrier(void)
Definition: procsignal.c:498