আলেকজান্ডার মিলস যে পোস্টটি পোস্ট করেছিলেন https://stackoverflow.com/a/41613532/1223975 সমাধান সম্পর্কে Timeout in Seconds
Darwin
, এটি ইউএনআইএক্স-এর মতো ওএসের জিএনইউ নেই এমন একটি কাজ 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
একটি আউটপুট ফরম্যাট স্পেসিফিকেশন হয়। একটি সহজ পোস্ট প্রসেসরের এটির প্রয়োজন হয় না। উদাহরণস্বরূপ, নিম্নলিখিত কমান্ডটি পাঁচ সেকেন্ড পর্যন্ত পিআইডি 5959 এ অপেক্ষা করে:
lsof -p 5959 +r 1 | awk '/^=/ { if (T++ >= 5) { exit 1 } }'
এই উদাহরণে, পিআইডি 5959 পাঁচ সেকেন্ড সময় পার হওয়ার আগে যদি তার নিজস্ব চুক্তি থেকে প্রস্থান হয়, ${?}
হয় 0
। পাঁচ সেকেন্ড পরে ${?}
ফিরে না আসলে 1
।
এটি স্পষ্টভাবে লক্ষ করার মতোও হতে পারে যে +r 1
এটি 1
হচ্ছে পোল ব্যবধান (সেকেন্ডের মধ্যে), সুতরাং এটি পরিস্থিতি অনুসারে পরিবর্তন করা যেতে পারে।