ไม่นานมานี้ฉันได้เขียนสคริปต์เพื่อรอการสิ้นสุดของกระบวนการอื่น NOISE_CMD
อาจเป็นสิ่งที่ต้องการ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
โดยไม่มีข้อโต้แย้งใด ๆ เพียงทำเสียงดังทันที พฤติกรรมนี้อนุญาตให้ใช้สิ่งนี้เพื่อความสะดวก (บอกว่าคุณเรียกสคริปต์ด้านล่างalarm.sh
):
apt-get upgrade ; ~/bin/alarm.sh
แน่นอนว่าคุณสามารถทำสิ่งต่าง ๆ ที่ตลก ๆ ด้วยสคริปต์เช่นปล่อยให้เป็นตัวอย่างของการalarm.sh
รอตัวอย่างalarm.sh
ซึ่งกำลังรอคำสั่งอื่นอยู่ หรือดำเนินการคำสั่งทันทีหลังจากงานของผู้ใช้ที่เข้าสู่ระบบรายอื่นเสร็จสิ้นแล้ว ... >: D
เวอร์ชันเก่าของสคริปต์ด้านบนอาจน่าสนใจถ้าคุณต้องการหลีกเลี่ยงการพึ่งพาpgrep
และยอมรับการค้นหา ID กระบวนการด้วยตัวคุณเอง:
#!/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 "$@"
หัวข้อเล็กน้อย แต่มีประโยชน์ในสถานการณ์ที่คล้ายกัน: หนึ่งอาจมีความสนใจในreptyr
เครื่องมือที่ "ขโมย" กระบวนการจากเปลือก (แม่) บางส่วนและเรียกใช้จากเปลือกปัจจุบัน ฉันได้ลองใช้งานที่คล้ายกันและreptyr
เป็นที่สวยที่สุดและน่าเชื่อถือที่สุดสำหรับวัตถุประสงค์ของฉัน