Mengenai solusi https://stackoverflow.com/a/41613532/1223975 yang diulangi oleh Alexander Mills Timeout in Seconds
Darwin
,, adalah solusi untuk OS mirip UNIX yang tidak memiliki GNU tail
. Ini tidak spesifik untuk Darwin
, tetapi, tergantung pada usia sistem operasi seperti UNIX, baris perintah yang ditawarkan lebih kompleks daripada yang diperlukan, dan dapat gagal:
lsof -p $pid +r 1m%s -t | grep -qm1 $(date -v+${timeout}S +%s 2>/dev/null || echo INF)
Pada setidaknya satu UNIX lama, lsof
argumen +r 1m%s
gagal (bahkan untuk pengguna super):
lsof: can't read kernel name list.
Ini m%s
adalah spesifikasi format keluaran. Post-prosesor yang lebih sederhana tidak memerlukannya. Misalnya, perintah berikut menunggu pada PID 5959 hingga lima detik:
lsof -p 5959 +r 1 | awk '/^=/ { if (T++ >= 5) { exit 1 } }'
Dalam contoh ini, jika PID 5959 keluar dengan sendirinya sebelum lima detik berlalu, ${?}
adalah 0
. Jika tidak ${?}
kembali 1
setelah lima detik.
Ini juga mungkin layak tegas mencatat bahwa +r 1
, yang 1
adalah interval polling (dalam detik), sehingga dapat diubah sesuai situasi.