查找进程是否正在运行 aa.sh 的 linux 命令是什么。ps 命令似乎不起作用,并且它不显示 shell 脚本名称。
请指教。
检查这个
ps aux | grep "aa.sh"
最简单有效的解决方案是:
pgrep -fl aa.sh
添加到上面的答案 -
要在脚本中使用,请使用以下内容:-
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
上面的解决方案非常适合交互式使用,您可以在其中观察结果并以这种方式清除误报。
如果可执行文件本身恰好匹配,或者任何不是脚本名称的参数匹配,则可能会出现误报 - 没有文件扩展名的脚本的可能性更大。
这是一个更强大的脚本解决方案,使用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
反映应用于命令行的原始引用。所有的功能保证是任何匹配都不是第一个标记(它是解释器),并且它作为一个单独的 word出现,可选地前面有一个路径。bash
)——假设它是已知的;例如# List instance(s) of a running *bash* script.
getbashscript() {
pgrep -lf "(^|/)bash( | .*/)$1( |\$)"
}
如果您愿意做出进一步的假设——例如从不包含嵌入空格的脚本解释器路径——可以使正则表达式更具限制性,从而进一步降低误报的风险。
检查这个
ps -ef | grep shellscripname.sh
您还可以在
ps -ef
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
pgrep -f aa.sh
要对 id 做某事,你可以通过管道处理它。在这里,我杀死了它的所有子任务。
pgrep aa.sh | xargs pgrep -P ${} | xargs kill
如果您想在进程正在运行时执行命令,请执行此操作
pgrep aa.sh && echo Running
这里有一个快速脚本来测试 shell 脚本是否正在运行
#!/bin/sh
scripToTest="your_script_here.sh"
scriptExist=$(pgrep -f "$scripToTest")
[ -z "$scriptExist" ] && echo "$scripToTest : not running" || echo "$scripToTest : runnning"
给 ps 一个选项以显示所有进程,例如:
ps -A | grep "myshellscript.sh"
检查http://www.cyberciti.biz/faq/show-all-running-processes-in-linux/了解更多信息
正如评论中提到的 Basile Starynkevitchpgrep
是另一种解决方案。