Finding the age of a unix process, killing old processes, killing zombie processes
I had issues with processes locking up. This script checks for processes and kills them if they are older than a certain time.
Its uses some functions you'll need to define or remove, like slog() which I use for logging, and is_running() which checks if this script is already running so you can add it to cron without running multiple copies.
Hope this helps someone ;-)
Jack.
Code:
#!/usr/bin/php
<?
if (is_running()) die();
slog("monitor started",2);
while(true){
check_process("convert"); // kill convert processes over 5 minutes old (default)
check_process("bash",1440); // kill bash processes over 1440 minutes old
check_process("qmail-smtpd",30); // kill qmail-smtpd processes over 30 minutes old
sleep(300);
}
function cmd($cmd){
$fp = popen($cmd, 'r');
$ret="";
while ($read = fread($fp, 2096)) $ret = $ret.$read;
pclose($fp);
return $ret;
}
function kill_pid($pid){
slog("kill_pid: killing [$pid]",2);
posix_kill($pid,1);
}
function check_process($cmd,$max_runtime=5) {
$now = getdate();
$h = $now['hours'];
$m = $now['minutes'];
$nowtime = ($h*3600)+($m*60);
$x = cmd("ps h -fC $cmd");
if ($x){
$x = explode("\n",$x);
foreach($x as $l){
if ($l){
while (strstr($l," ")) $l = str_replace(" "," ",$l);
list($owner,$pid,$ppid,$c,$stime,$tty,$s,$time,$cmd) = explode(" ",$l);
if (!strstr($stime,":")) {
slog("check_process: $cmd : STIME [$stime] - more than a day old",2);
kill_pid($pid);
} else {
slog("check_process: $cmd : check runtime");
list($sh,$sm) = explode(":",$stime);
$runtime = ($sh*3600)+($sm*60);
$diff = ($nowtime - $runtime)/60;
if ($diff>$max_runtime){
slog("check_process: $cmd : STIME [$stime] now [$h:$m] - over $max_runtime minutes since start",2);
kill_pid($pid);
} else slog("check_process: $cmd : STIME [$stime] now [$h:$m] - running $diff/$max_runtime minutes",2);
}
}
}
} else slog("check_process: $cmd : no processes",2);
}
?>
Last edited by sukerman; 04-14-2010 at 06:10 AM..
Reason: Added script shebang incase you didn't realise its php
I'm looking for some help, please!
I'm trying to kill any idle user processes over 40 Minutes.
I have tried putting TMOUT=2400
within the users .profile
However this does not seem to be working.
We run aix 4.3.3
with ORACLE 7.3
The above works o.k. when the user is only within the... (3 Replies)
I have a small problem. It's annoying though. I wrote this shell script:
#
# This script will accept two arguments. The first is a flag and the
# second is a time interval. The only valid flag is '-t' which means
# the user will specify the interval in seconds, otherwise the
# default is 600... (3 Replies)
how can I kill all the processes belonging to an user.
I need it because I can't see a process initiated by a user and thus unable to kill it. (2 Replies)
Hi everybody,
I'm having some problems wiriting a program in UNIX using the "fork" and "kill" system calls.
I have to create a C program P0, which creates 9 other processes
P1, P2, ..., P9, where P0 is the father of P1, P1 the father of P2, and so on.
All the processes contain an infinite... (0 Replies)
Hi everybody!!
I've got a problem. I have a loop like this:
while true; do
some_work
sleep 10m
done
It's possible to kill the main loop process and kill all childs from it? I want to kill main process and kill the sleep also. I tried kill -9 <loop_pid> with no result
... (4 Replies)
Is there a way to monitor certain processes and if they hang too long to kill them, but certain scripts which are expected to take a long time to let them go?
Thank you
Richard (4 Replies)
Hi,
Hoping someone may be able to help with some general guidance. Hope I've posted this in the right forum!
I hava DEC Workstation running OSF/1. It's will run for a period of time then slow down to the point it becomes unusable. Then i have to reboot and the whole thing repeats. I... (1 Reply)
Dear All,
I have checked so many post about killing Zombie process.
Most of the cases, everyone suggested to "reboot" the system, as "kill -9/-15 zombie" may not work!
My concern is:
If the system is a Production server then what to do?
Regards,
Sapy. (6 Replies)
i am new to unix..i have requirement to kill informatica server process.
when i used the below query
pidoff "pmserver"
it displayed 3 process running..
i need to get the 3 process and kill individual process in shell script.
Can you please assit me in this. (2 Replies)
Discussion started by: hkoshekay
2 Replies
LEARN ABOUT OSF1
uudemon
uudemon(4) Kernel Interfaces Manual uudemon(4)NAME
uudemon.admin, uudemon.cleanu, uudemon.hour, uudemon.poll - Administrative shell scripts for polling remote systems, cleaning up spool
directories, reporting status to the system administrator, and routine invocations of the uuxqt and uusched daemons
SYNOPSIS
These shell scripts reside in the following directory:
/usr/lib/uucp
DESCRIPTION
All the scripts can be run from the command line or can be run automatically by the cron daemon. To automatically run the scripts, remove
the comment character (#) from the beginning of the relevant line in the /var/spool/cron/crontabs/uucp file.
This script reports status to the system administrator. It issues the uustat command to find out the status of uucp jobs. It mails the
results to the uucp login ID. The script may be modified to send mail to any login ID such as the uucp administrative login ID (uucpa) or
root. This script cleans up the /var/spool/uucp and /var/spool/uucppublic directories by running the uucleanup command. The uucleanup com-
mand is run with the following parameters: -C7, -D7, X2, -o2, -W1. This script runs the uusched and uuxqt daemons in the background. This
script polls the systems listed in the /usr/lib/uucp/Poll file. The uudemon.poll script should be scheduled before the uudemon.hour
script. This allows uudemon.poll to create any command files before cron runs the uudemon.hour script.
FILES
Contains the uudemon.admin, uudemon.cleanu, uudemon.hour and uudemon.poll files. Contains the uucp file.
RELATED INFORMATION
Commands: cron(8), uucleanup(8), uusched(8), uuxqt(1)
Files: /usr/lib/uucp delim off
uudemon(4)