我需要实现一个杀死进程的shell脚本。问题是我需要做一个条件才能看到进程是否正在运行。
这是我的代码,但它不起作用:
#!/bin/sh
if [ -x "MY_PROCCESS_NAME"]; then
killall MY_PROCCESS_NAME
else
echo "Doesn't exist"
fi
这是错误:
line 3: [: missing `]'
答案 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。