diff --git a/doc/src/sgml/ref/pg_ctl-ref.sgml b/doc/src/sgml/ref/pg_ctl-ref.sgml index 07836e718f7027618c88fd98c938f64a39414933..7dc170ee89513da180f80a683bea1e15707d2931 100644 --- a/doc/src/sgml/ref/pg_ctl-ref.sgml +++ b/doc/src/sgml/ref/pg_ctl-ref.sgml @@ -205,7 +205,8 @@ PostgreSQL documentation <option>status</option> mode checks whether a server is running in the specified data directory. If it is, the <acronym>PID</acronym> and the command line options that were used to invoke it are - displayed. + displayed. If the server is not running, the process returns an + exit status of 3. </para> <para> diff --git a/src/bin/pg_ctl/pg_ctl.c b/src/bin/pg_ctl/pg_ctl.c index c9007eded92a6b9a99f003e018307dcda0e8e665..8e9d2cec3debf53eccb035995008c11bd91be4ef 100644 --- a/src/bin/pg_ctl/pg_ctl.c +++ b/src/bin/pg_ctl/pg_ctl.c @@ -1155,9 +1155,11 @@ do_status(void) pgpid_t pid; pid = get_pgpid(); - if (pid != 0) /* 0 means no pid file */ + /* Is there a pid file? */ + if (pid != 0) { - if (pid < 0) /* standalone backend */ + /* standalone backend? */ + if (pid < 0) { pid = -pid; if (postmaster_is_alive((pid_t) pid)) @@ -1168,7 +1170,7 @@ do_status(void) } } else - /* postmaster */ + /* must be a postmaster */ { if (postmaster_is_alive((pid_t) pid)) { @@ -1186,7 +1188,11 @@ do_status(void) } } printf(_("%s: no server running\n"), progname); - exit(1); + /* + * The Linux Standard Base Core Specification 3.1 says this should return '3' + * http://refspecs.freestandards.org/LSB_3.1.1/LSB-Core-generic/LSB-Core-generic/iniscrptact.html + */ + exit(3); }