ฉันชอบโซลูชันEDIT # 3 อย่างแน่นอน(ดูซอลเบลโลว์)
ถ้ามันไม่อยู่ในเชลล์เดียวกันให้ใช้whileลูปพร้อมเงื่อนไขกับps -p ที่คืนค่าจริง ทำให้sleepในลูปเพื่อลดการใช้งานตัวประมวลผล
while ps -p <pid> >/dev/null 2>&1
do
sleep 10
done
หรือถ้า UNIX ของคุณรองรับ / proc (ตัวอย่างเช่น HP-UX ยังไม่เกิดขึ้น)
while [[ -d /proc/<pid> ]]
do
sleep 10
done
หากคุณต้องการหมดเวลา
timeout=6 # timeout after 1mn
while ((timeout > 0)) && ps -p <pid> >/dev/null 2>&1
do
sleep 10
((timeout -= 1))
done
แก้ไข # 1
ไม่ได้ใช้: มีวิธีอื่น ๆ คือcron ใช้ชุดคำสั่งเพื่อสแต็คงานของคุณ
ตัวอย่างเช่นคุณสามารถซ้อนงานของคุณทุกวัน สามารถปรับแบทช์ให้อนุญาตให้มีการขนานกันได้ดังนั้นงานที่ถูกบล็อกจะไม่หยุดสแต็กทั้งหมด (ขึ้นอยู่กับระบบปฏิบัติการ)
แก้ไข # 2
สร้าง Fifo ในโฮมไดเร็กตอรี่ของคุณ:
$ mkfifo ~/tata
ในตอนท้ายของงานของคุณ:
echo "it's done" > ~/tata
ในช่วงเริ่มต้นของงานอื่น ๆ (คนที่รอ):
cat ~/tata
มันไม่ใช่การสำรวจความคิดเห็นเพราะมันเก่าดีในการบล็อก IO
แก้ไข # 3
ใช้สัญญาณ:
ในตอนต้นของสคริปต์ที่กำลังรอ:
echo $$ >>~/WeAreStopped
kill -STOP $$
ในตอนท้ายของงานที่ยาวนานของคุณ:
if [[ -f ~/WeAreStopped ]] ; then
xargs kill -CONT < ~/WeAreStopped
rm ~/WeAreStopped
fi