From 24800ffa999f527ac9c526ef11e6679d18269d39 Mon Sep 17 00:00:00 2001 From: Bharath Rupireddy Date: Fri, 19 Nov 2021 02:09:49 +0000 Subject: [PATCH v4] Improve PID XXXX is not a PostgreSQL server process message Currently, pg_signal_backend emits generic WARNING "PID XXXX is not a PostgreSQL server process" for postmaster and auxiliary processes which doesn't sound sensible. This patch tries to improve this message. --- src/backend/storage/ipc/signalfuncs.c | 38 +++++++++++++++++++++++---- 1 file changed, 33 insertions(+), 5 deletions(-) diff --git a/src/backend/storage/ipc/signalfuncs.c b/src/backend/storage/ipc/signalfuncs.c index de69d60e79..8d0f0fea65 100644 --- a/src/backend/storage/ipc/signalfuncs.c +++ b/src/backend/storage/ipc/signalfuncs.c @@ -48,7 +48,17 @@ static int pg_signal_backend(int pid, int sig) { - PGPROC *proc = BackendPidGetProc(pid); + PGPROC *proc; + + if (PostmasterPid == pid) + { + ereport(WARNING, + (errmsg("cannot send signal to postmaster %d", pid))); + + return SIGNAL_BACKEND_ERROR; + } + + proc = BackendPidGetProc(pid); /* * BackendPidGetProc returns NULL if the pid isn't valid; but by the time @@ -61,11 +71,29 @@ pg_signal_backend(int pid, int sig) if (proc == NULL) { /* - * This is just a warning so a loop-through-resultset will not abort - * if one backend terminated on its own during the run. + * AuxiliaryProcs are still PostgreSQL server processes, do a little + * more work and report a proper warning that says we cannot signal + * them. + * + * For an auxiliary process, retrieve process info from AuxiliaryProcs + * stored in shared-memory. */ - ereport(WARNING, - (errmsg("PID %d is not a PostgreSQL server process", pid))); + proc = AuxiliaryPidGetProc(pid); + + if (proc) + ereport(WARNING, + (errmsg("cannot send signal to PostgreSQL server process %d", + pid))); + else + { + /* + * This is just a warning so a loop-through-resultset will not + * abort if one backend terminated on its own during the run. + */ + ereport(WARNING, + (errmsg("PID %d is not a PostgreSQL backend process", pid))); + } + return SIGNAL_BACKEND_ERROR; } -- 2.25.1