Gunakan pgrepsebaliknya:
pgrep -cxu $USER -f my-tool
Opsi yang digunakan adalah:
-c, --count
Suppress normal output; instead print a count of matching pro‐
cesses. When count does not match anything, e.g. returns zero,
the command will return non-zero value.
-x, --exact
Only match processes whose names (or command line if -f is spec‐
ified) exactly match the pattern.
-u, --euid euid,...
Only match processes whose effective user ID is listed. Either
the numerical or symbolical value may be used.
Jika Anda ingin menggunakan ini dalam skrip bash yang memeriksa apakah sudah berjalan, Anda bisa menggunakannya $0. Ini memperluas ke jalan naskah saat ini (misalnya /home/username/bin/foo.sh) tetapi kita hanya perlu foo.sh. Untuk mendapatkan itu, kita dapat menghapus segala sesuatu sampai yang terakhir /menggunakan bash alat manipulasi string : ${0##*/}. Ini berarti kita dapat melakukan sesuatu seperti:
## If there are more than 1 instances of the current script run
## by this user
if [[ $(pgrep -cxu "$USER" "${0##*/}") -gt 1 ]];
then
echo "Script already running, exiting."
exit
fi
Anda mungkin juga ingin mempertimbangkan menggunakan file kunci untuk ini:
## If the lock file exists
if [ -e /tmp/$USER.foo.lock ]; then
## Check if the PID in the lockfile is a running instance
## of foo.sh to guard against crashed scripts
if ps $(cat /tmp/$USER.foo.lock) | grep foo.sh >/dev/null; then
echo "Script foo.sh is already running, exiting"
exit
else
echo "Lockfile contains a stale PID, continuing"
rm /tmp/$USER.foo.lock
fi
fi
## Create the lockfile by printing the script's PID into it
echo $$ > /tmp/$USER.foo.lock
## Rest of the script here
## At the end, delete the lockfile
rm /tmp/$USER.foo.lock
pidof, ada alat yang lebih baik berbohongpgrep