Shell脚本杀死进程

时间:2011-12-01 15:38:01

标签: macos shell

我需要实现一个杀死进程的shell脚本。问题是我需要做一个条件才能看到进程是否正在运行。

这是我的代码,但它不起作用:

#!/bin/sh

if [ -x  "MY_PROCCESS_NAME"]; then
    killall MY_PROCCESS_NAME
else
    echo "Doesn't exist"
fi

这是错误:

line 3: [: missing `]'

2 个答案:

答案 0 :(得分:2)

检查进程是否在mac os x上运行,你可以使用:

pid=$(ps -fe | grep 'process name' | grep -v grep | awk '{print $2}')

如果你想减少shell脚本的数量,你可以用方括号括起进程名称的一个字符:

pid=$(ps -fe | grep '[p]rocess name' | awk '{print $2}')

在你的测试中结合起来看起来像:

pid=$(ps -fe | grep '[p]rocess name' | awk '{print $2}')
if [[ -n $pid ]]; then
    kill $pid
else
    echo "Does not exist"
fi

它比你在Linux下需要做的要复杂得多,因为你通常有'pgrep'命令,这是'ps -fe |的粗略等价。 grep ... | grep -v grep'

答案 1 :(得分:0)

不确定它是否适用于OSX,它适用于ubuntu。

但作为一个班轮:

ps aux | awk '$11~/vim/ {PID = $2} END {if (PID) print "kill -9 "PID; else print "echo no process"}' | bash

它的作用是找到一个进程,在这种情况下是vim并返回kill -9 pid如果没有找到它返回echo no process它然后将输出传递给bash。