用于查找进程状态的Shell脚本,同时排除'ps grep命令'

时间:2017-03-16 02:41:35

标签: linux bash shell

有人可以指导我编写shell脚本来查找进程是否处于活动状态?我必须从ps命令中排除我自己的grep进程过滤。我想将该过程作为参数传递,

脚本:(目前正在捕捉我自己的流程)

let cities: [City] = {
    guard let URL = Bundle.main.url(forResource: "cities", withExtension: "plist")     else {
        return []
    }
    var cities = [City]()
    let myCites = NSArray(contentsOf: URL) as! [[String : String]]

    for city in myCites {
        cities.append(City(icao: city["icao"], name: city["name"]))
    }
    return cities
}()

示例输入尝试:(虽然进程已死,但我的状态为“ok”)

#!/bin/sh
SERVICE=$1
echo $1
if ps ax | grep $SERVICE  > /dev/null
then
    echo "ok"
else
    echo "not ok"
fi

请帮忙。

2 个答案:

答案 0 :(得分:2)

您也可以使用pgrep - 效率更高一点:

#!/bin/sh

service=$1
status=0
if [ ! -z "$service" ]; then
  pgrep "$service" >/dev/null; status=$?
  if [ "$status" -eq 0 ]; then
    echo "ok"
  else
    echo "not ok"
  fi
fi

exit "$status"

最好还有一个合适的退出值。

答案 1 :(得分:1)

您拥有的内容已接近,但您希望保存grep命令的状态(通过$?),然后保存该值的其他内容。

#!/bin/sh
SERVICE=$1
echo $1
ps ax | grep $SERVICE | grep -v ${0} > /dev/null
status=${?}

if [ "${status}" = "0" ]; then
    echo "ok"
else
    echo "not ok"
fi