[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

ldmadmin isrunning



Found an obscure bug in ldmadmin. (5.0.6 and greater) The command 
'ldmadmin isrunning' can return 0 (indicating that it is running)
when it is actually not running and an old ldmd.pid file exists with
a process ID that matches a non-ldm process. Here is the scenario
where I've seen this happen several times.

LDM starts soon after a reboot and thus gets a fairly low (ie; small)
process ID. Sometime later the system crashes or reboots suddenly.
The ldmd.pid file still exists. The command 'ldmadmin isrunning'
is executed, it gets the process ID from the ldmd.pid file, then
checks that that process is running. But that process is not an LDM
process, it's something totally unrelated that was started upon boot
up depending on the vaguaries of the system. ldmadmin isrunning then
returns saying the LDM is running when it's not.

For the time being, I modified our version of the check_running()
subroutine to change the command that looks for the process from the
ldmd.pid file. I changed it to grep for the string "rpc.ldmd" to confirm
that it's actually an LDM that that process ID belongs to.

-jim



sub check_running {

my($pid_num, $ps_cmd);

$pid_num = getPid() ;

return 1 if( $pid_num == -1 ) ;

if (($os eq "SunOS" && $version =~ /^4/) || $os eq "Linux" ) {
    $ps_cmd = "ps $pid_num | grep rpc.ldmd | grep -v grep";

} else {
    $ps_cmd = "ps -p $pid_num | grep rpc.ldmd | grep -v grep";
}

`$ps_cmd`;

if ($?) {
    return 1;
}
else {
    return 0;
}
}


-- 
Jim Cowie                               Software Engineer
WITI Corporation                        address@hidden
3300 Mitchell Lane 
Boulder, CO 80301                       (303) 497-8584