- Community Home
- >
- Servers and Operating Systems
- >
- Operating Systems
- >
- Operating System - HP-UX
- >
- user id processes not get killed
Categories
Company
Local Language
Forums
Discussions
Forums
- Data Protection and Retention
- Entry Storage Systems
- Legacy
- Midrange and Enterprise Storage
- Storage Networking
- HPE Nimble Storage
Discussions
Discussions
Discussions
Forums
Forums
Discussions
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
- BladeSystem Infrastructure and Application Solutions
- Appliance Servers
- Alpha Servers
- BackOffice Products
- Internet Products
- HPE 9000 and HPE e3000 Servers
- Networking
- Netservers
- Secure OS Software for Linux
- Server Management (Insight Manager 7)
- Windows Server 2003
- Operating System - Tru64 Unix
- ProLiant Deployment and Provisioning
- Linux-Based Community / Regional
- Microsoft System Center Integration
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Community
Resources
Forums
Blogs
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
тАО03-12-2009 02:42 AM
тАО03-12-2009 02:42 AM
Re: user id processes not get killed
# who -u
If you like to remove those users
# kill -9
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
тАО03-12-2009 02:44 AM
тАО03-12-2009 02:44 AM
Re: user id processes not get killed
" I have assigned points to 12 of 91 responses to my questions. "
Please assign point to your thread if you get your answers.
No points for this please.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
тАО03-12-2009 03:48 AM
тАО03-12-2009 03:48 AM
Re: user id processes not get killed
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
тАО03-12-2009 05:36 AM
тАО03-12-2009 05:36 AM
Re: user id processes not get killed
you may try to reboot your server.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
тАО03-12-2009 08:12 PM
тАО03-12-2009 08:12 PM
Re: user id processes not get killed
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
тАО03-12-2009 09:51 PM
тАО03-12-2009 09:51 PM
Re: user id processes not get killed
You will manually have to edit the /etc/utmp and /etc/utmpx files.
You may have to stop utmpd(1M) if on 11.23.
You can use fwtmp(1M) to format the /etc/utmp file but after you restart utmpd, it says it reads utmps. So you'll have to write a program like fwtmp to work on utmps(4) formats.
>MK: But if the session is ended with "kill -9", this process may be disrupted and the incorrect session information may remain
This is a broken design and basically says this info isn't important. There should be a system demon that makes sure this works correctly. That's probably why there is now utmpd(1M).
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
тАО08-06-2009 01:02 AM
тАО08-06-2009 01:02 AM
Re: user id processes not get killed
> You can use fwtmp(1M) to format the /etc/utmp file but after you restart utmpd, it says it reads utmps. So you'll have to write a program like fwtmp to work on utmps(4) formats.
...
> This is a broken design and basically says this info isn't important. There should be a system demon that makes sure this works correctly. That's probably why there is now utmpd(1M).
As far as I can tell from 2 days of investigation you are absolutely right on both accounts.
Reality as of 11v3 aka B.11.31 seems to be like this:
- there are utmpd + bunch of files
- /etc/utmp: good old legacy utmp
- /var/adm/wtmps: utmp log, updated (by utmpd?) too
- /var/adm/btmps: btmp log, updated (by utmpd?) too
- /etc/utmpx: newest utmp, reads deprecated (only if utmpd is not running); updated by utmpd
- /etc/utmps: utmpd saves state here on exit
- plus in-memory utmpd database, which is currently Right Way to access
- different programs use different DBs
- who uses utmpd, but 'who /etc/utmp' is ok too
- last/lastb use wtmps/btmps, last -f use /var/awm/wtmp
- utmpd is good but not fully reliable solution
- if shell is killed with -9, its tty record is forever in utmpd database
- restarting utmpd (whith /sbin/init.d/utmpd stop/start) does not help -- all is saved
in utmps and read back
- it would be good if HP added periodic check for dead PIDs of process leaders or at least
some cleanup at restart
- current crop of tools are unable to fix utmpd-related things
- fwtmp -X < /var/adm/wtmps is ok, fwtmp < /etc/utmp is ok too, but utmps and utmpx are
not accessible with fwtmp (different format)
- ./fwtmp < /etc/utmpx seems to work but resuls are total and obvious crap
- so there is no way to get rid of stale entries in utmpd DB except reload
- or maybe stopping utmpd and 'echo > /etc/utmps' before start, loosing current logins
I wrote 2 small tools to fix utmpd DB without reboot. Maybe they'll be userful to someone.
- read_utmps.c
#include
#include
int main()
{
// see /usr/include/utmps.h
struct utmps *wtmps;
// read in-memory utmpd DB
while ((wtmps = getutsent(sizeof(struct utmps))) != NULL) {
printf("%-16.16s %-8.8s %-12.12s %5ld %2hd %lu %s\n",
wtmps->ut_id, // unique ID
wtmps->ut_user,
wtmps->ut_line,
wtmps->ut_pid,
wtmps->ut_type, // 7 USER_PROCESS, 8 DEAD_PROCESS
wtmps->ut_tv.tv_sec,
wtmps->ut_host
);
}
}
- write_utmps.c
#include
#include
int main(int argc, char **argv)
{
// see /usr/include/utmps.h
struct utmps *wtmps;
if (! argv[1]) {
fprintf(stderr, "ERROR: pleas give ut_id of stale session as argument\n\n");
fprintf(stderr, "procedure is usually as follows:\n");
fprintf(stderr, "- find dead sessions like 'who -u | grep old'\n");
fprintf(stderr, " - ensure they're really dead with 'ps -xp
fprintf(stderr, "- find ut_id with read_utmps\n");
fprintf(stderr, " - 1st field, usually ==
fprintf(stderr, "- end session with write_utmps
fprintf(stderr, " - requires root privs\n");
return(1);
}
// read in-memory utmpd DB
while ((wtmps = getutsent(sizeof(struct utmps))) != NULL) {
if (strcmp(wtmps->ut_id, argv[1]) == 0) {
printf("bingo, %s found\n", argv[1]);
printf("%-15.15s %-8.8s %-12.12s %5ld %2hd %lu %s\n",
wtmps->ut_id, // unique ID
wtmps->ut_user,
wtmps->ut_line,
wtmps->ut_pid,
wtmps->ut_type, // 7 USER_PROCESS, 8 DEAD_PROCESS
wtmps->ut_tv.tv_sec,
wtmps->ut_host
);
// mark it as DEAD to end session
if (wtmps->ut_type == USER_PROCESS) {
wtmps->ut_type = DEAD_PROCESS;
time(&wtmps->ut_tv.tv_sec);
pututsline(wtmps, sizeof(struct utmps));
}
}
}
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
тАО08-06-2009 01:59 AM
тАО08-06-2009 01:59 AM
Re: user id processes not get killed
I may have spent that long on it, over several questions.
>if (!argv[1]) {
You might want to do the more obvious test:
if (argc < 2) {
fprintf(stderr, "ERROR: please give ut_id of stale session as argument\n\n");
You can combine all of these fprintf into one so you don't make libc sweat:
fprintf(stderr, "ERROR: please give ut_id of stale session as argument\n\n"
"procedure is usually as follows:\n"
" - ensure they're really dead with 'ps -xp
"- find ut_id with read_utmps\n"
" - 1st field, usually ==
"- end session with write_utmps
" - requires root privs\n");
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
тАО08-10-2009 11:16 PM
тАО08-10-2009 11:16 PM
Re: user id processes not get killed
> >if (!argv[1]) {
> You might want to do the more obvious test: if (argc < 2) {
I rarely write C -- only then there is no ready-made perl module for a task :)
Style aside, there is definitely room for improvement in write_utmps --
iterating whole DB is unnesessary because getutsid/getutsline allows us to
fetch session record by ID. Those 2 utils are quick hacks not intended for
continuous industrial use but to fill the void and maybe spare someone a
reboot or two.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
тАО03-10-2010 09:00 AM
тАО03-10-2010 09:00 AM