Jed*_*ith 30
解析这个:
ps aux | grep -v grep | grep -c [-i] $ProcessName
Run Code Online (Sandbox Code Playgroud)
......可能是你最好的选择.这是一个简短的脚本,可以完成您的工作:
#!/bin/bash
PROCESS=myapp
number=$(ps aux | grep -v grep | grep -ci $ProcessName)
if [ $number -gt 0 ]
then
echo Running;
fi
Run Code Online (Sandbox Code Playgroud)
编辑:我最初包括一个ps aux标志grep -v grep,使其不区分大小写; 我这样做是因为我试过的示例程序是grep -c [-i] $ProcessName在Mac OS X上运行的-i- 如果你完全了解你的应用程序的情况,grep则没有必要.
这种方法的优点在于它可以随您扩展 - 将来,如果您需要确保应用程序的五个实例正在运行,那么您已经在计算.唯一需要注意的是,如果另一个应用程序在其命令行中有您的程序名称,它可能会出现 - 正则表达式python将解决该问题,如果您是狡猾的(并遇到此问题).
Nic*_*kiy 27
更短的解决方案:
if pgrep $PROCESS_NAME; then
echo 'Running';
fi
Run Code Online (Sandbox Code Playgroud)
说明:
pgrep如果进程匹配$PROCESS_NAME正在运行则退出0 ,否则它与1.一起
if检查退出代码pgrep,并且,就退出代码而言,0表示成功.
amr*_*rox 11
另一种方法是使用(滥用?)命令的-d选项killall.该-d选项实际上不会终止进程,而是打印会怎样做.0如果找到匹配的进程,它也将以状态退出,或者1如果没有,则退出.把它放在一起:
#!/bin/bash
`/usr/bin/killall -d "$1" &> /dev/null`
let "RUNNING = ! $?" # this simply does a boolean 'not' on the return code
echo $RUNNING
Run Code Online (Sandbox Code Playgroud)
为了给予应有的信用,我最初从iTunes安装程序中的脚本中提取了这项技术.
小智 5
这个简单的命令可以解决问题.进程名称周围的括号可防止grep命令显示在进程列表中.请注意逗号后面没有空格.可能存在一些可移植性问题,因为某些unix系统上的ps可能需要在选项之前使用破折号:
ps axo pid,command | grep "[S]kype"
Run Code Online (Sandbox Code Playgroud)
优点是您可以在if语句中使用结果,如下所示:'
if [[ ! $(ps axo pid,command | grep "[i]Tunes.app") ]]; then
open -a iTunes
fi
Run Code Online (Sandbox Code Playgroud)
或者如果你喜欢这种风格:
[[ ! $(ps axo pid,command | grep "[S]kype") ]] && open -a Skype || echo "Skype is up"
Run Code Online (Sandbox Code Playgroud)
另一个优点是你可以通过向awk'{print $ 1}'添加管道来获得pid.
echo "iTunes pid: $(ps axo pid,command | grep "[i]Tunes.app" | awk '{print $1}')"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
40742 次 |
| 最近记录: |