|
|
@ -5,7 +5,7 @@ |
|
|
|
* to contain some useful information. Differs wildly across |
|
|
|
* to contain some useful information. Differs wildly across |
|
|
|
* platforms. |
|
|
|
* platforms. |
|
|
|
* |
|
|
|
* |
|
|
|
* $Header: /cvsroot/pgsql/src/backend/utils/misc/ps_status.c,v 1.2 2000/07/09 13:14:11 petere Exp $ |
|
|
|
* $Header: /cvsroot/pgsql/src/backend/utils/misc/ps_status.c,v 1.3 2001/03/20 22:31:54 momjian Exp $ |
|
|
|
* |
|
|
|
* |
|
|
|
* Copyright 2000 by PostgreSQL Global Development Group |
|
|
|
* Copyright 2000 by PostgreSQL Global Development Group |
|
|
|
* various details abducted from various places |
|
|
|
* various details abducted from various places |
|
|
@ -44,7 +44,7 @@ extern char **environ; |
|
|
|
* PS_USE_PS_STRINGS |
|
|
|
* PS_USE_PS_STRINGS |
|
|
|
* assign PS_STRINGS->ps_argvstr = "string" |
|
|
|
* assign PS_STRINGS->ps_argvstr = "string" |
|
|
|
* (some BSD systems) |
|
|
|
* (some BSD systems) |
|
|
|
* PS_USE_CHANCE_ARGV |
|
|
|
* PS_USE_CHANGE_ARGV |
|
|
|
* assign argv[0] = "string" |
|
|
|
* assign argv[0] = "string" |
|
|
|
* (some other BSD systems) |
|
|
|
* (some other BSD systems) |
|
|
|
* PS_USE_CLOBBER_ARGV |
|
|
|
* PS_USE_CLOBBER_ARGV |
|
|
@ -189,64 +189,68 @@ init_ps_display(int argc, char *argv[], |
|
|
|
void |
|
|
|
void |
|
|
|
set_ps_display(const char * value) |
|
|
|
set_ps_display(const char * value) |
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
#ifndef PS_USE_NONE |
|
|
|
/* no ps display for stand-alone backend */ |
|
|
|
/* no ps display for stand-alone backend */ |
|
|
|
if (!IsUnderPostmaster) |
|
|
|
if (!IsUnderPostmaster) |
|
|
|
return; |
|
|
|
return; |
|
|
|
|
|
|
|
|
|
|
|
#ifndef PS_USE_NONE |
|
|
|
# ifdef PS_USE_CLOBBER_ARGV |
|
|
|
|
|
|
|
/* If ps_buffer is a pointer, it might still be null */ |
|
|
|
if (!ps_buffer) |
|
|
|
if (!ps_buffer) |
|
|
|
return; |
|
|
|
return; |
|
|
|
# ifdef PS_USE_SETPROCTITLE |
|
|
|
# endif |
|
|
|
setproctitle("%s%s", ps_buffer, value); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# else /* not PS_USE_SETPROCTITLE */ |
|
|
|
/* Update ps_buffer to contain both fixed part and value */ |
|
|
|
{ |
|
|
|
StrNCpy(ps_buffer + ps_buffer_fixed_size, value, |
|
|
|
size_t vallen = strlen(value); |
|
|
|
ps_buffer_size - ps_buffer_fixed_size); |
|
|
|
|
|
|
|
|
|
|
|
strncpy(ps_buffer + ps_buffer_fixed_size, value, |
|
|
|
/* Transmit new setting to kernel, if necessary */ |
|
|
|
ps_buffer_size - ps_buffer_fixed_size); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (ps_buffer_fixed_size + vallen >= ps_buffer_size) |
|
|
|
# ifdef PS_USE_SETPROCTITLE |
|
|
|
ps_buffer[ps_buffer_size - 1] = 0; |
|
|
|
setproctitle("%s", ps_buffer); |
|
|
|
else |
|
|
|
# endif |
|
|
|
ps_buffer[ps_buffer_fixed_size + vallen] = 0; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# ifdef PS_USE_PSTAT |
|
|
|
# ifdef PS_USE_PSTAT |
|
|
|
{ |
|
|
|
{ |
|
|
|
union pstun pst; |
|
|
|
union pstun pst; |
|
|
|
|
|
|
|
|
|
|
|
pst.pst_command = ps_buffer; |
|
|
|
pst.pst_command = ps_buffer; |
|
|
|
pstat(PSTAT_SETCMD, pst, strlen(ps_buffer), 0, 0); |
|
|
|
pstat(PSTAT_SETCMD, pst, strlen(ps_buffer), 0, 0); |
|
|
|
} |
|
|
|
} |
|
|
|
# endif /* PS_USE_PSTAT */ |
|
|
|
# endif /* PS_USE_PSTAT */ |
|
|
|
|
|
|
|
|
|
|
|
# ifdef PS_USE_PS_STRINGS |
|
|
|
# ifdef PS_USE_PS_STRINGS |
|
|
|
PS_STRINGS->ps_nargvstr = 1; |
|
|
|
PS_STRINGS->ps_nargvstr = 1; |
|
|
|
PS_STRINGS->ps_argvstr = ps_buffer; |
|
|
|
PS_STRINGS->ps_argvstr = ps_buffer; |
|
|
|
# endif /* PS_USE_PS_STRINGS */ |
|
|
|
# endif /* PS_USE_PS_STRINGS */ |
|
|
|
|
|
|
|
|
|
|
|
# ifdef PS_USE_CLOBBER_ARGV |
|
|
|
# ifdef PS_USE_CLOBBER_ARGV |
|
|
|
{ |
|
|
|
{ |
|
|
|
char * cp; |
|
|
|
char * cp; |
|
|
|
/* pad unused memory */ |
|
|
|
/* pad unused memory */ |
|
|
|
for(cp = ps_buffer + ps_buffer_fixed_size + vallen; |
|
|
|
for(cp = ps_buffer + strlen(ps_buffer); |
|
|
|
cp < ps_buffer + ps_buffer_size; |
|
|
|
cp < ps_buffer + ps_buffer_size; |
|
|
|
cp++) |
|
|
|
cp++) |
|
|
|
*cp = PS_PADDING; |
|
|
|
*cp = PS_PADDING; |
|
|
|
} |
|
|
|
} |
|
|
|
# endif /* PS_USE_CLOBBER_ARGV */ |
|
|
|
# endif /* PS_USE_CLOBBER_ARGV */ |
|
|
|
} |
|
|
|
|
|
|
|
# endif /* not USE_SETPROCTITLE */ |
|
|
|
|
|
|
|
#endif /* not PS_USE_NONE */ |
|
|
|
#endif /* not PS_USE_NONE */ |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
/*
|
|
|
|
* Returns what's currently in the ps display, in case someone needs |
|
|
|
* Returns what's currently in the ps display, in case someone needs |
|
|
|
* it. |
|
|
|
* it. Note that only the variable part is returned. |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
const char * |
|
|
|
const char * |
|
|
|
get_ps_display(void) |
|
|
|
get_ps_display(void) |
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
#ifdef PS_USE_CLOBBER_ARGV |
|
|
|
|
|
|
|
/* If ps_buffer is a pointer, it might still be null */ |
|
|
|
|
|
|
|
if (!ps_buffer) |
|
|
|
|
|
|
|
return ""; |
|
|
|
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
return ps_buffer + ps_buffer_fixed_size; |
|
|
|
return ps_buffer + ps_buffer_fixed_size; |
|
|
|
} |
|
|
|
} |
|
|
|