aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruce Momjian <bruce@momjian.us>2004-05-31 17:57:31 +0000
committerBruce Momjian <bruce@momjian.us>2004-05-31 17:57:31 +0000
commitd534b9ee9e8fec0b4d295e7450f6654b08490690 (patch)
treea9c240578ce918c7d6d40c2e66d1a75fd493d76f
parentcbfa4092bb9c0668dba9870ca06038aebe71d7e6 (diff)
downloadpostgresql-d534b9ee9e8fec0b4d295e7450f6654b08490690.tar.gz
postgresql-d534b9ee9e8fec0b4d295e7450f6654b08490690.zip
Have pg_ctl print pid and error on signal failure, per suggestion from Tom.
-rw-r--r--src/bin/pg_ctl/pg_ctl.c60
1 files changed, 32 insertions, 28 deletions
diff --git a/src/bin/pg_ctl/pg_ctl.c b/src/bin/pg_ctl/pg_ctl.c
index 847bdf9332d..ba797fb0b4f 100644
--- a/src/bin/pg_ctl/pg_ctl.c
+++ b/src/bin/pg_ctl/pg_ctl.c
@@ -4,7 +4,7 @@
*
* Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
*
- * $PostgreSQL: pgsql/src/bin/pg_ctl/pg_ctl.c,v 1.1 2004/05/27 03:37:55 momjian Exp $
+ * $PostgreSQL: pgsql/src/bin/pg_ctl/pg_ctl.c,v 1.2 2004/05/31 17:57:31 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -59,7 +59,6 @@ static int wait_seconds = 60;
static bool silence_echo = false;
static ShutdownMode shutdown_mode = SMART_MODE;
static int sig = SIGTERM; /* default */
-static int killproc;
static CtlCommand ctl_command = NO_COMMAND;
static char *pg_data_opts = NULL;
static char *pg_data = NULL;
@@ -80,8 +79,8 @@ static void do_stop(void);
static void do_restart(void);
static void do_reload(void);
static void do_status(void);
-static void do_kill(void);
-static long get_pgpid(void);
+static void do_kill(pid_t pid);
+static pid_t get_pgpid(void);
static char **readfile(char *path);
static int start_postmaster(void);
static bool test_postmaster_connection(void);
@@ -127,11 +126,11 @@ xstrdup(const char *s)
-static long
+static pid_t
get_pgpid(void)
{
FILE *pidf;
- long pid;
+ pid_t pid;
pidf = fopen(pid_file, "r");
if (pidf == NULL)
@@ -145,7 +144,7 @@ get_pgpid(void)
exit(1);
}
}
- fscanf(pidf, "%ld", &pid);
+ fscanf(pidf, "%u", &pid);
fclose(pidf);
return pid;
}
@@ -324,8 +323,8 @@ test_postmaster_connection(void)
static void
do_start(void)
{
- long pid;
- long old_pid = 0;
+ pid_t pid;
+ pid_t old_pid = 0;
char *optline = NULL;
if (ctl_command != RESTART_COMMAND)
@@ -458,7 +457,7 @@ static void
do_stop(void)
{
int cnt;
- long pid;
+ pid_t pid;
pid = get_pgpid();
@@ -473,14 +472,15 @@ do_stop(void)
pid = -pid;
fprintf(stderr,
_("%s: cannot stop postmaster; "
- "postgres is running (PID: %ld)\n"),
+ "postgres is running (PID: %u)\n"),
progname, pid);
exit(1);
}
- if (kill((pid_t) pid, sig) != 0)
+ if (kill(pid, sig) != 0)
{
- fprintf(stderr, _("stop signal failed\n"));
+ fprintf(stderr, _("stop signal failed (PID: %u): %s\n"), pid,
+ strerror(errno));
exit(1);
}
@@ -537,7 +537,7 @@ static void
do_restart(void)
{
int cnt;
- long pid;
+ pid_t pid;
pid = get_pgpid();
@@ -553,15 +553,16 @@ do_restart(void)
pid = -pid;
fprintf(stderr,
_("%s: cannot restart postmaster; "
- "postgres is running (PID: %ld)\n"),
+ "postgres is running (PID: %u)\n"),
progname, pid);
fprintf(stderr, _("Please terminate postgres and try again.\n"));
exit(1);
}
- if (kill((pid_t) pid, sig) != 0)
+ if (kill(pid, sig) != 0)
{
- fprintf(stderr, _("stop signal failed\n"));
+ fprintf(stderr, _("stop signal failed (PID: %u): %s\n"), pid,
+ strerror(errno));
exit(1);
}
@@ -608,7 +609,7 @@ do_restart(void)
static void
do_reload(void)
{
- long pid;
+ pid_t pid;
pid = get_pgpid();
if (pid == 0) /* no pid file */
@@ -622,15 +623,16 @@ do_reload(void)
pid = -pid;
fprintf(stderr,
_("%s: cannot reload postmaster; "
- "postgres is running (PID: %ld)\n"),
+ "postgres is running (PID: %u)\n"),
progname, pid);
fprintf(stderr, _("Please terminate postgres and try again.\n"));
exit(1);
}
- if (kill((pid_t) pid, sig) != 0)
+ if (kill(pid, sig) != 0)
{
- fprintf(stderr, _("reload signal failed\n"));
+ fprintf(stderr, _("reload signal failed (PID: %u): %s\n"), pid,
+ strerror(errno));
exit(1);
}
@@ -645,7 +647,7 @@ do_reload(void)
static void
do_status(void)
{
- long pid;
+ pid_t pid;
pid = get_pgpid();
if (pid == 0) /* no pid file */
@@ -656,13 +658,13 @@ do_status(void)
else if (pid < 0) /* standalone backend */
{
pid = -pid;
- fprintf(stdout, _("%s: a standalone backend \"postgres\" is running (PID: %ld)\n"), progname, pid);
+ fprintf(stdout, _("%s: a standalone backend \"postgres\" is running (PID: %u)\n"), progname, pid);
}
else /* postmaster */
{
char **optlines;
- fprintf(stdout, _("%s: postmaster is running (PID: %ld)\n"), progname, pid);
+ fprintf(stdout, _("%s: postmaster is running (PID: %u)\n"), progname, pid);
optlines = readfile(postopts_file);
if (optlines != NULL)
@@ -674,11 +676,12 @@ do_status(void)
static void
-do_kill(void)
+do_kill(pid_t pid)
{
- if (kill(killproc, sig) != 0)
+ if (kill(pid, sig) != 0)
{
- fprintf(stderr, _("signal %d failed\n"), sig);
+ fprintf(stderr, _("signal %d failed (PID: %u): %s\n"), sig, pid,
+ strerror(errno));
exit(1);
}
}
@@ -810,6 +813,7 @@ main(int argc, char **argv)
int option_index;
int c;
+ int killproc = 0;
#ifdef WIN32
setvbuf(stderr, NULL, _IONBF, 0);
@@ -1005,7 +1009,7 @@ main(int argc, char **argv)
do_reload();
break;
case KILL_COMMAND:
- do_kill();
+ do_kill(killproc);
break;
default:
break;