user752590 user752590 - 1 year ago 28
Bash Question

Killing previous instances at first time,if running

Following is my script '' code, I am running this script in background,Before running this script, i want to kill all previous instances.
But this is killing my curent instance also.

kill -9 `ps ux|grep|awk -F\ '{print $2}'`
while true;
sleep 5

Answer Source

Just eliminate the current process' PID from the list. To do this making just the minimal change to your code:

kill -9 `ps ux | grep | awk -F\  -v pid=$$ 'pid != $2 {print $2}'`

The option -v pid=$$ sets the awk variable pid to the value of the current process' process ID. The expression pid != $2 {print $2} will print a process ID only if it differs from the current process' process ID.

To simplify the code, we could use pgrep:

kill -9 $(pgrep | grep -v $$)

As triplee points out in the comments, kill -9 should only be used as a last resort. -9 (SIGKILL) prevents a process from cleaning up after itself, deleting temporary files, etc. Other signals that one may want to try first include -2 (SIGINT), -6 (SIGABRT), or -15 (SIGTERM, which is the default). For more details on why kill -9 should be avoided, see here. For more information on the various Unix signals and their meaning, see wikipedia