Щодо рішення https://stackoverflow.com/a/41613532/1223975, яке Олександр Міллс повторно відмітив, Timeout in Seconds Darwin- це рішення для ОС, схожої на UNIX, яка не має GNU tail. Це не конкретно Darwin, але, залежно від віку операційної системи, схожої на UNIX, запропонований командний рядок є складнішим, ніж необхідно, і може вийти з ладу:
lsof -p $pid +r 1m%s -t | grep -qm1 $(date -v+${timeout}S +%s 2>/dev/null || echo INF)
Принаймні на одному старому UNIX lsofаргумент +r 1m%sне вдається (навіть для суперпользователя):
lsof: can't read kernel name list.
Це m%sспецифікація формату виводу. Простіший постпроцесор цього не вимагає. Наприклад, наступна команда чекає на PID 5959 до п'яти секунд:
lsof -p 5959 +r 1 | awk '/^=/ { if (T++ >= 5) { exit 1 } }'
У цьому прикладі, якщо PID 5959 закінчується за власним бажанням до того, як минуть п'ять секунд, ${?}це 0. Якщо не ${?}повертається 1через п’ять секунд.
Вона також може бути варто прямо зазначити , що в +r 1, то 1є інтервал опитування (в секундах), так що він може бути змінений відповідно до ситуації.