Bir süre önce başka bir sürecin sonunu bekleyecek bir senaryo yazdım. Doğru ayarlandığı taktirde , bunun NOISE_CMD
gibi bir şey olabilir .notify-send ...
DISPLAY
#!/bin/bash
NOISE_CMD="/usr/bin/mplayer -really-quiet $HOME/sfx/alarm-clock.mp3"
function usage() {
echo "Usage: $(basename "$0") [ PROCESS_NAME [ PGREP_ARGS... ] ]"
echo "Helpful arguments to pgrep are: -f -n -o -x"
}
if [ "$#" -gt 0 ] ; then
PATTERN="$1"
shift
PIDS="$(pgrep "$PATTERN" "$@")"
if [ -z "$PIDS" ] ; then
echo "No process matching pattern \"$PATTERN\" found."
exit
fi
echo "Waiting for:"
pgrep -l "$PATTERN" "$@"
for PID in $PIDS ; do
while [ -d "/proc/$PID" ] ; do
sleep 1
done
done
fi
exec $NOISE_CMD
Herhangi bir yayılma olmadan, hemen biraz gürültü yapın. Bu davranış, kolaylık olması için buna benzer bir şeye izin verir (aşağıdaki betiği çağırdığınızı söyleyin alarm.sh
):
apt-get upgrade ; ~/bin/alarm.sh
Elbette böyle bir senaryo ile birçok komik şey yapabilirsiniz, bir örnek için alarm.sh
beklemek durumunda kalmak alarm.sh
, başka bir komut beklemek gibi. Veya hemen giriş yapmış bir kullanıcının bir görevinin bitmesinden hemen sonra bir komut çalıştırmak ...>: D
pgrep
Proses kimliğine bağımlılıktan kaçınmak ve kendiniz arama işlemini kabul etmek istiyorsanız, yukarıdaki betiğin eski bir sürümü ilginç olabilir :
#!/bin/bash
if [ "$#" -lt 2 -o ! -d "/proc/$1" ] ; then
echo "Usage: $(basename "$0") PID COMMAND [ ARGUMENTS... ]"
exit
fi
while [ -d "/proc/$1" ] ; do
sleep 1
done
shift
exec "$@"
Biraz konu dışı, ancak benzer durumlarda kullanışlıdır: Biri reptyr
, bazı (ana) kabuğundan bir işlemi "çalan" ve mevcut kabuğundan çalıştıran bir araçla ilgilenebilir . Benzer uygulamaları denedim ve reptyr
amaçlarım için en güzel ve en güvenilir olanıyım.