kri*_*zna 29
检查一下
ps aux | grep "aa.sh"
Run Code Online (Sandbox Code Playgroud)
Gil*_*not 25
最简单的解决方案是:
pgrep -fl aa.sh
Run Code Online (Sandbox Code Playgroud)
添加上面的答案 -
要在脚本中使用,请使用以下内容: -
result=`ps aux | grep -i "myscript.sh" | grep -v "grep" | wc -l`
if [ $result -ge 1 ]
then
echo "script is running"
else
echo "script is not running"
fi
Run Code Online (Sandbox Code Playgroud)
上面的解决方案非常适合交互式使用,您可以在其中观察结果并以这种方式清除误报。
如果可执行文件本身恰好匹配,或者任何不是脚本名称匹配的参数,则可能会发生误报 - 没有文件扩展名的脚本的可能性更大。
这是一个更强大的脚本解决方案,使用shell 函数:
getscript() {
pgrep -lf ".[ /]$1( |\$)"
}
Run Code Online (Sandbox Code Playgroud)
使用示例:
# List instance(s) of script "aa.sh" that are running.
getscript "aa.sh" # -> (e.g.): 96112 bash /Users/jdoe/aa.sh
# Use in a test:
if getscript "aa.sh" >/dev/null; then
echo RUNNING
fi
Run Code Online (Sandbox Code Playgroud)
-i到pgrep通话,使之区分于敏感;在Linux上,这不是一个选项)getscript函数也适用于包含文件名组件的完整或部分路径;部分路径不能以开头,/并且指定的每个组件都必须是完整的。指定的路径越“完整”,误报的风险就越低。警告:路径匹配仅在使用路径调用脚本时才有效- 这对于 $PATH 中直接调用的脚本通常是正确的。ps也不能pgrep反映应用于命令行的原始引用。所有的函数都保证任何匹配都不是第一个标记(它是解释器),并且它作为一个单独的 word 出现,可选地前面有一个路径。bash)——假设它是已知的;例如getscript() {
pgrep -lf ".[ /]$1( |\$)"
}
Run Code Online (Sandbox Code Playgroud)
如果您愿意做出进一步的假设 - 例如脚本解释器路径从不包含嵌入空格 - 可以使正则表达式更具限制性,从而进一步降低误报的风险。
检查一下
ps -ef | grep shellscripname.sh
Run Code Online (Sandbox Code Playgroud)
您还可以在以下位置找到运行过程
ps -ef
Run Code Online (Sandbox Code Playgroud)