简体   繁体   中英

Binary operator expected error while running a while loop in bash

TL:DR

Check if a given PID is running, if yes kill the process.

count=0
  while [[ "$count" -le 3 && ps -p $pid > /dev/null ]];
  do
   kill -9 $pid
   count=$(( $count + 1 )):
  done

To this I am getting an error as:

line 8: [: -p: binary operator expected

I am aware there are several similar questions, I already tried their solutions but it doesn't seem to work.

The while loop is logically incorrect, as @kvantour mentioned. Here is the script. Note that it will let you know if it could not kill the process, so you can investigate the root cause. The script gets PID as its first argument (eg $./kill-pid.sh 1234 ) Note that this works for bash ver. 4.1+:

#!/usr/bin/env bash

if ps -p $1 > /dev/null

then
  output=$(kill -9 $1 2>&1)
    if [ $? -ne 0 ]
    then
      echo "Process $1 cannot be killed. Reason:"
      echo "$output"
# This line is added per OP request, to try to re-run the kill command if it failed for the first time.
#      kill -9 $1
    fi
fi

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM