Https://stackoverflow.com/a/41613532/1223975 सॉल्यूशन के बारे में कि अलेक्जेंडर मिल्स ने रिपॉजिट किया, Timeout in Seconds
Darwin
एक UNIX जैसे OS के लिए एक वर्कअराउंड है जिसमें GNU नहीं है tail
। यह Darwin
यूनिक्स-जैसे ऑपरेटिंग सिस्टम की उम्र के आधार पर विशिष्ट नहीं है , लेकिन पेश की जाने वाली कमांड-लाइन आवश्यकता से अधिक जटिल है, और विफल हो सकती है:
lsof -p $pid +r 1m%s -t | grep -qm1 $(date -v+${timeout}S +%s 2>/dev/null || echo INF)
कम से कम एक पुराने यूनिक्स पर, 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 } }'
इस उदाहरण में, यदि पीआईडी 5959 पांच सेकंड के एलैपेस से पहले अपने स्वयं के समझौते से बाहर निकलता है, ${?}
है 0
। अगर पांच सेकंड के बाद नहीं ${?}
लौटे 1
।
यह भी स्पष्ट रूप से ध्यान देने योग्य हो सकता है कि +r 1
, 1
चुनाव अंतराल (सेकंड में) है, इसलिए इसे स्थिति के अनुरूप बदला जा सकता है।