নির্দিষ্ট সময়ের পরে কোনও কমান্ডকে স্ব-হত্যা করতে কমান্ড লাইন কমান্ডের এই উত্তর
ব্যাশ কমান্ড লাইন থেকে দীর্ঘ-চলমান কমান্ডের সময়সীমা নির্ধারণের জন্য একটি 1-লাইন পদ্ধতি প্রস্তাব করে:
( /path/to/slow command with options ) & sleep 5 ; kill $!
তবে এটি সম্ভবত প্রদত্ত "দীর্ঘ-চলমান" কমান্ডের সময়সীমা শেষ হওয়ার আগে শেষ হতে পারে। (আসুন একে একে "সাধারণত দীর্ঘ-চলমান-তবে-কখনও কখনও দ্রুত" কমান্ড, বা মজাদার জন্য tlrbsf বলি ))
সুতরাং এই নিফটি 1-লাইন পদ্ধতির বেশ কয়েকটি সমস্যা রয়েছে। প্রথমত, sleep
শর্তসাপেক্ষ নয়, যাতে ক্রমটি শেষ হওয়ার জন্য নেওয়া সময়টির উপর একটি অনাকাঙ্ক্ষিত নিম্ন বাউন্ড সেট করে। 30s বা 2m বা এমনকি 5m ঘুমের জন্য বিবেচনা করুন, যখন tlrbsf কমান্ড 2 সেকেন্ডের মধ্যে শেষ হয় - অত্যন্ত অনাকাঙ্ক্ষিত। দ্বিতীয়ত, এটি kill
নিঃশর্ত, সুতরাং এই ক্রমটি একটি চলমান প্রক্রিয়াটিকে মেরে ফেলার চেষ্টা করবে এবং এটি সম্পর্কে কৌতুক করবে।
তাই ...
একটি সাধারণত-দীর্ঘ-চলমান-তবে-কখনও কখনও দ্রুত ( "tlrbsf" ) কমান্ডের টাইমআউট করার কোনও উপায় আছে যা
- বাশ বাস্তবায়ন রয়েছে (অন্য প্রশ্নের মধ্যে ইতিমধ্যে পার্ল এবং সি উত্তর রয়েছে)
- দুটির প্রথমদিকে সমাপ্ত হবে: tlrbsf প্রোগ্রামের সমাপ্তি, বা সময়সীমা অতিক্রান্ত
- অ-বিদ্যমান / অ-চলমান প্রক্রিয়াগুলিকে হত্যা করবে না (বা, বিকল্পভাবে: খারাপ কিল সম্পর্কে অভিযোগ করবে না )
- 1-লাইনার হতে হবে না
- সাইগউইন বা লিনাক্সের অধীনে চলতে পারে
... এবং, বোনাস পয়েন্টগুলির জন্য, অগ্রভাগে tlrbsf কমান্ড এবং পটভূমিতে কোনও 'স্লিপ' বা অতিরিক্ত প্রক্রিয়া চালিত করে , যেমন tlrbsf কমান্ডের stdin / stdout / stderr পুনঃনির্দেশিত করা যেতে পারে, যেমন এটি হয়েছে সরাসরি চালাবেন?
যদি তা হয় তবে আপনার কোডটি শেয়ার করুন। যদি না হয়, কেন তা ব্যাখ্যা করুন।
আমি উপরোক্ত উদাহরণটি হ্যাক করার জন্য কিছুটা সময় ব্যয় করেছি তবে আমি আমার বাশ দক্ষতার সীমাটি আঘাত করছি।
timeout
ইউটিলিটি ব্যবহার না করার কোনও কারণ ?
timeout
মহান! আপনি একাধিক কমান্ড (মাল্টি-লাইন স্ক্রিপ্ট) দিয়েও ব্যবহার করতে পারেন : stackoverflow.com/a/61888916/658497