如果进程说aa.sh正在运行,那么找到什么是linux命令。 ps命令似乎不起作用,它不显示shell脚本名称。
请告知。
答案 0 :(得分:27)
检查
ps aux | grep "aa.sh"
答案 1 :(得分:25)
最简单的解决方案是:
pgrep -fl aa.sh
答案 2 :(得分:5)
添加上述答案 -
要在脚本中使用,请使用以下命令: -
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
答案 3 :(得分:4)
检查
ps -ef | grep shellscripname.sh
您还可以在
中找到正在运行的流程ps -ef
答案 4 :(得分:2)
上述解决方案非常适合交互式使用,您可以通过这种方式观察结果并排除误报。
如果可执行文件本身匹配,或者任何非脚本名称的参数匹配,则可能出现误报 - 对于没有文件扩展名的脚本,可能性更大。
这是脚本的更强大解决方案,使用 shell函数:
getscript() {
pgrep -lf ".[ /]$1( |\$)"
}
使用示例:
# 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
-i
添加到pgrep
调用以使其 敏感;在Linux上,这不是选项)。getscript
函数也适用于包含文件名组件的完整或部分路径;部分路径不能以/
开头,并且指定的每个组件都必须完整。指定的路径“更全面”,误报的风险越低。 警告:路径匹配仅在脚本使用路径调用时才有效 - 对于直接调用的$ PATH中的脚本通常是这样。ps
和pgrep
都不会反映应用于命令行的原始引用。所有函数保证是任何匹配不是第一个令牌(它是解释器),并且它作为单独的单词出现,可选地前面有一个路径。< / LI>
bash
) - 假设它已知; e.g。# List instance(s) of a running *bash* script.
getbashscript() {
pgrep -lf "(^|/)bash( | .*/)$1( |\$)"
}
如果您愿意做出进一步的假设 - 例如脚本解释器路径从不包含嵌入空间 - 可以使正则表达式更具限制性,从而进一步降低误报的风险。
答案 5 :(得分:2)
pgrep -f aa.sh
要使用id执行某些操作,请将其管道化。在这里,我杀死了它的所有子任务。
pgrep aa.sh | xargs pgrep -P ${} | xargs kill
如果要在进程运行时执行命令,请执行此操作
pgrep aa.sh && echo Running
答案 6 :(得分:2)
我对mklement0的最后一个答案很有启发 - 我通过/etc/crontab
每次重启都运行的脚本/小程序很少。我建立了他的答案,并构建了一个登录脚本,显示我的程序是否仍在运行。
我在每次登录时通过scripts.sh
-file执行此.profile
,以便在每次登录时获得即时通知。
cat scripts.sh
#!/bin/bash
getscript() {
pgrep -lf ".[ /]$1( |\$)"
}
script1=keepalive.sh
script2=logger_v3.py
# test if script 1 is running
if getscript "$script1" >/dev/null; then
echo "$script1" is RUNNING
else
echo "$script1" is NOT running
fi
# test if script 2 is running:
if getscript "$script2" >/dev/null; then
echo "$script2" is RUNNING
else
echo "$script2" is NOT running
fi
答案 7 :(得分:1)
这里是一个快速脚本,用于测试shell脚本是否正在运行
#!/bin/sh
scripToTest="your_script_here.sh"
scriptExist=$(pgrep -f "$scripToTest")
[ -z "$scriptExist" ] && echo "$scripToTest : not running" || echo "$scripToTest : runnning"
答案 8 :(得分:0)
为ps提供一个选项以显示所有进程,例如:
ps -A | grep "myshellscript.sh"
查看http://www.cyberciti.biz/faq/show-all-running-processes-in-linux/了解详情
正如评论pgrep
中提到的Basile Starynkevitch是另一种解决方案。