<listitem>
        <para>
         The maximum number of seconds to wait when waiting for startup or
-        shutdown to complete.  The default is 60 seconds.
+        shutdown to complete.  Defaults to the value of the
+        <envar>PGCTLTIMEOUT</> environment variable or, if not set, to 60
+        seconds.
        </para>
       </listitem>
      </varlistentry>
   <title>Environment</title>
 
   <variablelist>
+   <varlistentry>
+    <term><envar>PGCTLTIMEOUT</envar></term>
+
+    <listitem>
+     <para>
+      Default limit on the number of seconds to wait when waiting for startup
+      or shutdown to complete.  If not set, the default is 60 seconds.
+     </para>
+    </listitem>
+   </varlistentry>
+
    <varlistentry>
     <term><envar>PGDATA</envar></term>
 
 
 static bool do_wait = false;
 static bool wait_set = false;
 static int     wait_seconds = DEFAULT_WAIT;
+static bool wait_seconds_arg = false;
 static bool silent_mode = false;
 static ShutdownMode shutdown_mode = FAST_MODE;
 static int     sig = SIGINT;           /* default */
        if (registration && do_wait)
                appendPQExpBuffer(cmdLine, " -w");
 
-       if (registration && wait_seconds != DEFAULT_WAIT)
+       /* Don't propagate a value from an environment variable. */
+       if (registration && wait_seconds_arg && wait_seconds != DEFAULT_WAIT)
                appendPQExpBuffer(cmdLine, " -t %d", wait_seconds);
 
        if (registration && silent_mode)
                {NULL, 0, NULL, 0}
        };
 
+       char       *env_wait;
        int                     option_index;
        int                     c;
        pgpid_t         killproc = 0;
        }
 #endif
 
+       env_wait = getenv("PGCTLTIMEOUT");
+       if (env_wait != NULL)
+               wait_seconds = atoi(env_wait);
+
        /*
         * 'Action' can be before or after args so loop over both. Some
         * getopt_long() implementations will reorder argv[] to place all flags
                                        break;
                                case 't':
                                        wait_seconds = atoi(optarg);
+                                       wait_seconds_arg = true;
                                        break;
                                case 'U':
                                        if (strchr(optarg, '\\'))