天天看點

Linux程序管理之結束與程序名稱相比對的程序(sh腳本)

在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 &gt;</code><code>/dev/null</code> <code>2&gt;&amp;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 &amp;&amp; $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 &gt;/dev/null 2&gt;&amp;1 &amp; 一直運作,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

繼續閱讀