方法一:
在fc4的/etc/init.d/functions文件中,有一句是用来判断字符串是否是pid(当然全部应该是数字啦)
[ -z "${p//[0-9]/}" -a -d "proc/$p" ]
这句总的意思是看看$p是不是数字串,要是是的话,再看看是不是有/proc/$p这个目录。如果两个都成立,那么$p就是一个进程号了。
"${p//[0-9]/" 的意思是输出一个字符串,这个字符串是把$p里的数字(0-9)全替换成空(不是空格,就是删掉的意思)后的结果。当然命令执行后$p不变。这样,接着用-z判断输出的结果是否为空字符串,是的话,说明$p就是数字字符串啦。
以上这种方法在fc4的shell(默认应该是bash)下运行没有问题,但是在busybox的shell里却出现:
Bad substitution. 没办法,只好用另外一种方法了。
方法二:
[ "`expr $p + 0`" != "" -a -d "/proc/$p" ]
这个效果和前面的一样。
注意expr $p + 0左右那两点是在键盘上输出!1的那个键边上那个键产生的,并不是普通的单引号。
若是$p是字符,那么运行expr $p + 0出错, "`expr $p + 0`" != "" 输出的是一个空字符串,否则输出一个非空的字符串(即是相加后的结果)
在fc4的/etc/init.d/functions文件中,有一句是用来判断字符串是否是pid(当然全部应该是数字啦)
[ -z "${p//[0-9]/}" -a -d "proc/$p" ]
这句总的意思是看看$p是不是数字串,要是是的话,再看看是不是有/proc/$p这个目录。如果两个都成立,那么$p就是一个进程号了。
"${p//[0-9]/" 的意思是输出一个字符串,这个字符串是把$p里的数字(0-9)全替换成空(不是空格,就是删掉的意思)后的结果。当然命令执行后$p不变。这样,接着用-z判断输出的结果是否为空字符串,是的话,说明$p就是数字字符串啦。
以上这种方法在fc4的shell(默认应该是bash)下运行没有问题,但是在busybox的shell里却出现:
Bad substitution. 没办法,只好用另外一种方法了。
方法二:
[ "`expr $p + 0`" != "" -a -d "/proc/$p" ]
这个效果和前面的一样。
注意expr $p + 0左右那两点是在键盘上输出!1的那个键边上那个键产生的,并不是普通的单引号。
若是$p是字符,那么运行expr $p + 0出错, "`expr $p + 0`" != "" 输出的是一个空字符串,否则输出一个非空的字符串(即是相加后的结果)