1
|
<br>
|
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
|
# 该函数有二个作用: # 1、根据给定的二进制运行程序,找出该程序的进程号(PID)。 # 2、判断该二进制程序的运行状态,输出不同的返回値,供查看一个程序的运行状态时使用。 # __proc_pids {program} [pidfile] -----> 该函数的用法 # Set $pid to pids from /var/run* for {program}. # $pid should be declared # local in the caller. # Returns LSB exit code for the 'status' action. __pids_var_run() { local base=${1 ##*/}
# 参数替换,使用局部变量$base 存储程序的二进制文件名。
local pid_file=${2:- /var/run/ $base.pid}
# 参数替换。如果调用该函数时,没有给$2或为空,将使
# 用/var/run/$base.pid作为变量 pid_file的值。 pid= # 设置一个全局变量,但其值为空。记录进程的PID号
if [ -f "$pid_file" ] ; then # 判断变量的值是否是一个文件,
local line p
read line < "$pid_file" # 读取文件的内容
for p in $line ; do [ -z "${p//[0-9]/}" -a -d "/proc/$p" ] && pid= "$pid $p" # 找出二进制运行程序的PID号。
# 一个二进制可运行程序启动后,一般会在/var/run/目录下创建一个
# $base.pid 文件。
#同时会把自己的进程号(PID)写到该文件中,当然有可能也会把另外的信息写到该文件中
# 同时系统会在/proc 目录中创建一个以该二进制运行程序的PID为名称的目录
# 该目录保存了,二进制运行程序的使用资源情况等等。
#也有例外:/var/run/$base.pid 文件是空的。也有程序把pid文件存放在其它目
#的。mysql
done
if [ -n "$pid" ]; then return 0
# 如果找到进程号就返回状态码 0.代表二进制程序是运行的。
fi
return 1 # "Program is dead and /var/run pid file exists"
# 如果找不到进程号,就返回状态码 1.但是: /var/run/目录下是有pid文件的。
# $base.pid是空的,也会找不到PID的。但是并不代表$base是不运行的。
fi
return 3 # "Program is not running"
# 如果:/var/run/ 目录上没有pid文件,就返回状态码 3 .该二进制程序是停止的。
} |
本文转自成长的小虫 51CTO博客,原文链接:http://blog.51cto.com/9528du/1419499,如需转载请自行联系原作者