天天看点

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

继续阅读