Bash - Kill a process
About
How to kill a process
Articles Related
Utility
kill
kill is bash builtin command
kill [-s sigspec | -n signum | -sigspec] [pid | jobspec] ...
kill -l [sigspec | exit_status]
Send the signal named by sigspec or signum to the processes named by pid or jobspec. sigspec is either a case-insensitive signal name such as SIGKILL (with or without the SIG prefix) or a signal number; signum is a signal number. If sigspec is not present, then SIGTERM is assumed. An argument of -l lists the signal names. If any arguments are supplied when -l is given, the names of the signals corresponding to the arguments are listed, and the return status is 0. The exit_status argument to -l is a number specifying either a signal number or the exit status of a process terminated by a signal. kill returns true if at least one signal was successfully sent, or false if an error occurs or an invalid option is encountered.
pkill
pkill will look up or signal processes based on name and other attributes
Syntax
pkill [-signal] [-fvx] [-n|-o] [-P ppid,...] [-g pgrp,...]
[-s sid,...] [-u euid,...] [-U uid,...] [-G gid,...]
[-t term,...] [pattern]
where:
- - f The full command line is used to match a process with the pattern (Default: process name)
Example
SIGKILL handler
########### SIGKILL handler ############
function _kill() {
echo "SIGKILL received, shutting down database!"
}
Kill.sh
#!/bin/sh
get_pid ()
{
os_name=`uname -s`
case "$os_name" in
SunOS)
ANA_VARIANT="Solaris";;
HP-UX)
ANA_VARIANT="HPUX";;
AIX)
ANA_VARIANT="AIX";;
Linux)
ANA_VARIANT="Linux";;
CYGWIN_NT-5.*)
ANA_VARIANT="Windows";;
*)
ANA_VARIANT="UnknownOS"
esac
if [ "$ANA_VARIANT" = "AIX" ]; then
echo `ps -u$LOGNAME | grep $1 | awk '{print $2}'`
else
echo `ps -u$LOGNAME | grep $1 | awk '{print $1}'`
fi
}
pid=`get_pid $1`
if test "$pid" ; then
echo "Killing $1"
kill -9 $pid
fi
exit 0
where pid is the process id
Wait a little bit before killing
wait_until_done ()
{
pid=$1
cnt=${DRILLBIT_TIMEOUT:-300}
origcnt=$cnt
while kill -0 $pid > /dev/null 2>&1; do
if [ $cnt -gt 1 ]; then
cnt=`expr $cnt - 1`
sleep 1
else
echo "Process did not complete after $origcnt seconds, killing."
kill -9 $pid
exit 1
fi
done
return 0
}