在linux系統中經常會遇到結束某個程序的情況,一般我們會使用kill、pkill、killall甚至top這樣的工具結束程序,但這些工具雖然是結束程序的基本工具,但使用起來要接程序名全名或準确的pid。下文提供的腳本可以結束與指定的程序名稱相比對的任意程序(殺死指定名稱的程序),如果比對的pid有兩個及其以上,kill也能處理掉,設計這個功能的工程師實在是太高明了!贊!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<code>#!/bin/bash</code>
<code>pname=$1</code>
<code>puser=$2</code>
<code>if</code> <code>[[ -z $pname ]]; </code><code>then</code>
<code>echo</code> <code>"fatal error, you must assign a process name"</code>
<code>exit</code> <code>1</code>
<code>fi</code>
<code>if</code> <code>[[ </code><code>"$1"</code> <code>== </code><code>"-h"</code> <code>|| </code><code>"$1"</code> <code>== </code><code>"--help"</code> <code>]]; </code><code>then</code>
<code>echo</code> <code>"func: this shell script will find the process you want to kill with signal 9, process name support regular expression with 'grep'\n"</code>
<code>echo</code> <code>"usage: $0 processname\n"</code>
<code>echo</code> <code>"example: $0 run, this will kill all process which match 'run'\n"</code>
<code>exit</code> <code>0</code>
<code>if</code> <code>[[ -z $puser ]]; </code><code>then</code>
<code>puser=root</code>
<code>pid=`</code><code>ps</code> <code>aux | </code><code>grep</code> <code>$pname | </code><code>grep</code> <code>$puser | </code><code>grep</code> <code>-</code><code>v</code> <code>grep</code> <code>| </code><code>awk</code> <code>'{print $2}'</code><code>`</code>
<code>if</code> <code>[[ -z $pid ]]; </code><code>then</code>
<code> </code><code>echo</code> <code>":(, i can not find $pname running by $puser"</code>
<code># there maybe exist bugs refer to $pid have more than one pid, such as 2 or more</code>
<code># so there is a todo to fix it,</code>
<code># but kill utility support kill pids which more than one, :)</code>
<code>kill</code> <code>-9 $pid ></code><code>/dev/null</code> <code>2>&1</code>
<code># eof</code>
<code># because of kill will exit automatically</code>
<code>reval=$?</code>
<code>vpid=`</code><code>ps</code> <code>aux | </code><code>grep</code> <code>$pname | </code><code>grep</code> <code>$puser | </code><code>grep</code> <code>-</code><code>v</code> <code>grep</code> <code>| </code><code>awk</code> <code>'{print $2}'</code><code>`</code>
<code>if</code> <code>[[ -z $vpid && $reval -</code><code>eq</code> <code>0 ]]; </code><code>then</code>
<code> </code><code>echo</code> <code>":(, failed, i can not kill $pname running by $puser, got an error code $reval"</code>
<code>else</code>
<code> </code><code>echo</code> <code>":), successfully,i killed $pname running by $puser"</code>
測試用腳本,此腳本會借助nohup this >/dev/null 2>&1 & 一直運作,this表示你想命名的名字,别忘了chmod +x this。
<code>while</code> <code>:</code>
<code>do</code>
<code>#sleep 2 second</code>
<code>usleep 2000</code>
<code>done</code>
end