এটি কিছু সময়ের জন্য চালানোর অনুমতি দেওয়ার পরে হত্যা করুন


13

আমি একটি grepপ্রসেস কমান্ড চালানোর বা বেঁচে থাকার অনুমতি দেওয়ার সময় সীমাবদ্ধ করতে চাই ।

উদাহরণ স্বরূপ. আমি নিম্নলিখিত সম্পাদন করতে চাই:

grep -qsRw -m1 "parameter" /var

তবে grepকমান্ডটি চালানোর আগে আমি grepপ্রক্রিয়াটি কত দিন বেঁচে থাকতে সীমাবদ্ধ করতে চাই , 30 সেকেন্ডের বেশি বল না।

আমি এটা কিভাবে করবো?

এবং যদি এটি পারে তবে আমি কীভাবে ফিরব বা পুনরায় সেট করব তার পরে কোনও সময়সীমা নেই।


3
আপনি ইতিমধ্যে এটি জিজ্ঞাসা না? stackoverflow.com/questions/3061377/...

কোন এই অন্য quastion কারণ আমি উত্তর orig quastion Yael পেতে

4
@ আইয়েল: আপনি এর আগে একটি দুর্দান্ত সমাধান timeoutপেয়েছিলেন এবং এটি কীভাবে ইনস্টল করবেন সে সম্পর্কে আপনি নির্দেশও পেয়েছিলেন। এই উত্তরটিকে অগ্রাহ্য করা এবং তারপরে আপনার প্রশ্নের সদৃশ করা অসম্পূর্ণ।
পল আর

দুঃখিত তবে না আমি আমার সিস্টেমে কিছু ইনস্টল করতে চাই না THX yael

5
@ আইয়েল: তারপরে আপনাকে এই সীমাবদ্ধতা অন্তর্ভুক্ত করার জন্য আপনার মূল প্রশ্নটি আপডেট করতে হবে, কেবল প্রশ্নটির সদৃশ নয় এবং আবারও শুরু করুন
পল আর

উত্তর:


12

আপনি টাইমলিমিট ব্যবহার করতে পারেন , এটি ডিফল্ট উবুন্টুতে উপলভ্য বা আপনি নিজেই এটি সংকলন করতে পারেন।

টাইমলিমিট একটি কমান্ড কার্যকর করে এবং প্রদত্ত সিগন্যাল সহ একটি নির্দিষ্ট সময়ের পরে তৈরি হওয়া প্রক্রিয়াটি বন্ধ করে দেয়। প্রথমে একটি "সতর্কতা" সিগন্যাল প্রেরণ করা হয়, তারপরে, একটি টাইমআউট পরে, "কিল" সিগন্যাল, যেভাবে ইনড (8) শাটডাউনে পরিচালিত হয় তার অনুরূপ।


2
এটি আমার উবুন্টাসে নেই (১০.১০ ডেস্কটপ, ১১.০৪ সার্ভার) তাই সম্ভবত কোনও ডিফল্ট নয়। তবে সহজেই দ্রুত ধরে ফেললাম sudo aptitude install timelimit। একবার ইনস্টল দুর্দান্ত কাজ করে।
দিন

7

তার জন্য এখানে কিছুটা হ্যাকিশ বাশ দেওয়া হয়েছে:

grep -qsRw -m1 "parameter" /var &

GREPPID=$!

( sleep 30; kill $GREPPID ) &

fg $GREPPID

মূলত, এটি ব্যাকগ্রাউন্ডে অনুসন্ধান শুরু করে, তারপরে একটি সাবশেল শুরু হয় যা 30 সেকেন্ড অপেক্ষা করে এবং তারপরে অনুসন্ধানের প্রক্রিয়াটি মেরে ফেলে। অনুসন্ধানে <30s সময় লাগলে প্রক্রিয়াটি ইতিমধ্যে মারা যাবে। ইতিমধ্যে মৃত একটি প্রক্রিয়াটি মেরে ফেলা কোনও দুর্দান্ত ধারণা নয় কারণ খুব অল্প কিছু অন্যরকমভাবে পিডটি পুনরায় ব্যবহার করতে পারে তবে এর মতো কিছু ক্ষেত্রে এটি সাধারণত ঠিক okay শেষ অবধি, অনুসন্ধানটিকে অগ্রভাগে রেখে দেওয়া হবে এবং এটি শেষ না হওয়া বা হত্যা না হওয়া পর্যন্ত চলবে।


কিভাবে পেতে হবে? এই ক্ষেত্রে গ্রেপ থেকে কারণ আমার স্ক্রিপ্টে আমি take নিই? গ্রেপ থেকে এবং গ্রিপ স্ট্রিংয়ের সাথে মেলে কিনা তা যাচাই করুন? yael

আমি নিশ্চিত নই যে এটি করার সহজ সরল উপায় আছে। তদ্ব্যতীত, এই পদ্ধতির কোনও স্ক্রিপ্টে কাজ করে না যেখানে ব্যাশের কাজের নিয়ন্ত্রণ সক্রিয় নেই। কোনও স্ক্রিপ্টে কাজটি করতে আপনাকে পার্ল হ্যাকারির কিছুটা অবলম্বন করতে হতে পারে। হুম ...
ওয়াল্টার মুন্ড

এই প্রশ্নটি বেঁধে দেওয়া কি সম্ভব? Yael

4

"Tgrep" নামে একটি নতুন ফাইল তৈরি করুন এবং এটিতে নিম্নলিখিতটি লিখুন (বা আপনি যা খুশি তাই কল করুন):

#!/bin/bash
grep $@ &
PID=$!
sleep 30 && kill $PID 2>/dev/null &
wait $PID
exit 0

পরবর্তী, চালান chmod a+x tgrep। এখন আপনি যদি এটি ব্যবহার করতে চান তবে আপনি টাইপ করতে পারেন

./tgrep -i "results" /home/dan/*txt

অথবা আপনি এটি কেবল tgrep হিসাবে ব্যবহার করতে পারেন (./ ব্যতীত এবং এটি কোনও ডিরেক্টরি থেকে এটি ব্যবহার করতে সক্ষম হন) যদি আপনি এটি আপনার $ PATH ভেরিয়েবলের মধ্যে থাকা কোনও ডিরেক্টরিতে রাখেন (যেমন / হোম / ড্যান / বিন / যেমন থাকে তবে) আপনার $ PATH ভেরিয়েবল, অন্যথায় আপনি এটি যুক্ত করতে পারেন)।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.