我已经四处寻找,但还没有找到我正在寻找的东西.简而言之,我创建了一个bash脚本,在无限循环中运行,睡眠并检查进程是否正在运行.唯一的问题是即使进程正在运行,也表示它不是并打开另一个实例.
我知道我应该按进程名称检查而不是进程ID,因为另一个进程可以跳入并获取id.但是,所有perl程序在我的系统上都命名为Perl5.10.0,我打算打开同一个perl程序的多个实例.
以下“if”总是返回false,我在这里做错了什么???
while true; do if [ ps -p $pid ]; then echo "Program running fine" sleep 10 else echo "Program being restarted\n" perl program_name.pl & sleep 5 read -r pid < "${filename}_pid.txt" fi done
解决方法
摆脱方括号.它应该是:
if ps -p $pid; then
方括号是测试命令的语法糖.这是一个完全不同的野兽,根本不会调用ps:
if test ps -p $pid; then
事实上,当我运行它时会产生“-bash:[: – p:二元运算符预期”.