我试图做一个简单的检查,看看VLC播放器是否正在运行:
if [ `ps -ef | grep vlc | wc -l` -gt 1 ]
如果我从shell发出这个命令,它在运行1时返回2是grep的进程,另一个是VLC的进程。如果它没有运行,那么它返回1(greps进程)。
但是,如果我尝试从shell脚本执行此操作,则如果它不运行则返回3,如果不运行则返回4.
有人可以请解释这里发生了什么。有更优雅的方式吗?
答案 0 :(得分:1)
如果我从shell发出此命令,它在运行1时返回2 如果它没有运行则返回1(greps进程)。 但是,如果我尝试从shell脚本执行此操作,则如果它不运行则返回3,如果不运行则返回4.
那是因为您获得了包含vlc
字的evey流程。
所以你想要更新你的脚本是:
if [ `ps -ef | grep -v grep | grep -v "$0"| grep vlc | wc -l` -gt 1 ]
因为grep -v
删除了参数字符串,所以它会删除grep
进程和"$0"
进程。
答案 1 :(得分:0)
当你运行一个shell命令时,它本身就是一个内部有“vlc”的新进程。 当您在shell脚本中运行它时,您还有另外两个进程:shell脚本和其中的命令。 试试这个(在脚本中)来查看所有进程:
ps -ef | grep vlc