Bir süre önce başka bir sürecin sonunu bekleyecek bir senaryo yazdım. Doğru ayarlandığı taktirde , bunun NOISE_CMDgibi 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.shbeklemek 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
pgrepProses 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 reptyramaçlarım için en güzel ve en güvenilir olanıyım.