Tôi chắc chắn thích giải pháp EDIT # 3 (xem dưới đây).
nếu nó không có trong vỏ cùng sử dụng một trong khi vòng lặp với điều kiện trên ps -p trở thành sự thật. Đặt một giấc ngủ trong vòng lặp để giảm việc sử dụng bộ xử lý.
while ps -p <pid> >/dev/null 2>&1
do
sleep 10
done
hoặc nếu UNIX của bạn đang hỗ trợ / Proc (ví dụ HP-UX vẫn không).
while [[ -d /proc/<pid> ]]
do
sleep 10
done
Nếu bạn muốn thời gian chờ
timeout=6 # timeout after 1mn
while ((timeout > 0)) && ps -p <pid> >/dev/null 2>&1
do
sleep 10
((timeout -= 1))
done
EDIT # 1
Có một cách khác: không sử dụng cron . Sử dụng lệnh batch để xếp công việc của bạn.
Ví dụ, bạn có thể sắp xếp hàng ngày tất cả các công việc của bạn. Hàng loạt có thể được điều chỉnh để cho phép một số song song để một công việc bị chặn sẽ không dừng tất cả ngăn xếp (Nó phụ thuộc vào hệ điều hành).
EDIT # 2
Tạo một fifo trong thư mục nhà của bạn:
$ mkfifo ~/tata
khi kết thúc công việc của bạn:
echo "it's done" > ~/tata
khi bắt đầu công việc khác (người đang chờ):
cat ~/tata
Nó không bỏ phiếu đó là IO cũ chặn tốt.
EDIT # 3
Sử dụng tín hiệu:
Khi bắt đầu tập lệnh, người đang (đang) chờ đợi:
echo $$ >>~/WeAreStopped
kill -STOP $$
vào cuối công việc dài của bạn:
if [[ -f ~/WeAreStopped ]] ; then
xargs kill -CONT < ~/WeAreStopped
rm ~/WeAreStopped
fi