নির্দিষ্ট সময়ের জন্য বাশ রান কমান্ড?


12

আমি আমার ব্যবহারের জন্য বাশ স্ক্রিপ্ট তৈরি করছি। আমি কীভাবে নির্দিষ্ট সময়ের জন্য একটি কমান্ড চালাতে পারি, যেমন 20 সেকেন্ড এবং সমাপ্ত কমান্ড? আমি অনেকগুলি সমাধানের চেষ্টা করেছিলাম কিন্তু কিছুই কার্যকর হয় না, আমি টাইমআউট কমান্ডও চেষ্টা করেছি কোন সাফল্য ছাড়াই। দয়া করে এর জন্য আমাকে কিছু সমাধান দিন।

উদাহরণস্বরূপ: আমি এই কমান্ডটি 10 ​​সেকেন্ডের পরে স্ক্রিপ্ট এবং টার্মিনালে চালাতে চাই

some command

উত্তর:


14

এইচএম, কৌশলটি করা উচিত:

xmessage "Hello World" &
pidsave=$!
sleep 10; kill $pidsave

xmessageএখানে একটি দ্রুত পরীক্ষার কেস সরবরাহ করে (আপনার ক্ষেত্রে এয়ারডাম্প কমান্ডটি সেখানে যাওয়া উচিত); &এটি পটভূমিতে রাখে।

$!শেষ শুরু হওয়া প্রক্রিয়াটির পিআইডি হোল্ড করে (দেখুন /programming//a/1822042/2037712 দেখুন ); পিআইডি ভেরিয়েবলের মধ্যে সংরক্ষিত হয় pidsave

কিছু অপেক্ষার পরে ( sleep), TERMপ্রক্রিয়াটিতে একটি সংকেত প্রেরণ করুন ।


ধন্যবাদ বন্ধু এটি কাজ করে তবে এখন আমার 1 টি সমস্যা আছে। আমি আউটপুট দেখতে চাই যা কমান্ড দ্বারা তৈরি হয়েছিল তবে xmessage উইন্ডো কিছুই দেখায় না।
উমায়ের রিয়াজ

@ উমিররিয়াজ: এক্সমেসেজ কেবল একটি উদাহরণ ছিল। প্রশ্নটিতে আপনার উদাহরণটি মানিয়ে নিতে এবং some command > logfile &প্রথম লাইনে কমান্ডের আউটপুট লগ করতে । এরপরে আপনি বিশ্লেষণ করতে পারেন logfile
এমপি

4

ব্যাশ প্রম্পট থেকে আপনি "

  • your_command & sleep 20; kill $!
  • অথবা টাইমআউট কমান্ডটি ব্যবহার করুন: উদাহরণস্বরূপ aptget install timeoutএবংtimeout -k 3m 14s your_command
  • বা expectএখানে বর্ণিত হিসাবে ব্যবহার করুন: /unix/43340/how-to-introduce-timeout-for-shell-scriptting
  • বা পার্ল দিয়ে এটি করুন: perl -e "alarm 10; exec @ARGV" "Your_command"
  • অথবা এই আরও ক্রিপ্টিক সমাধানটি ব্যবহার করুন: $COMMAND 2>&1 >/dev/null & WPID=$!; sleep $TIMEOUT && kill $! & KPID=$!; wait $WPID( উত্স এবং ব্যাখ্যা )

1

আরেকটি উপায় হ'ল পিগ্রেপ $ প্যাটার্ন বা পিকিল $ প্যাটার্ন ব্যবহার করা; প্রদত্ত প্যাটার্নের সাথে মিলে সমস্ত পিআইডি সরবরাহ করে, মেশিনে সমস্ত চলমান প্রক্রিয়াগুলি দেখে। সুতরাং পিআইডি'র সুযোগটি কেবলমাত্র আপনার নিজের মধ্যে সীমাবদ্ধ করতে, ব্যবহার করুন: pgrep -P $ mypid $ প্যাটার্ন, বা pkill -P $ মাইপিড $ প্যাটার্ন

সুতরাং একটি নির্দিষ্ট সময়ের জন্য একটি পটভূমি প্রক্রিয়া চালানোর জন্য, আপনার স্ক্রিপ্টটি দেখতে এমন কিছু দেখাচ্ছে:

#!/bin/bash 
mypid=$$
run_something &
sleep $time_in_seconds
pkill -P $mypid something

মনে রাখবেন যে এটি বর্তমান প্যারেন্ট পিআইডি এর অধীনে চলমান একই প্যাটার্নের সাথে সমস্ত প্রক্রিয়াটিকে হত্যা করবে। সুতরাং আপনি একাধিক প্রক্রিয়া শুরু করতে এটি ব্যবহার করতে পারেন এবং নির্দিষ্ট সময়ের পরে সমস্তগুলি একসাথে হত্যা করতে পারেন।


0

আপনি ইবে-অ্যালার্মের মতো একটি কমান্ড-লাইন অ্যালার্ম ঘড়ি ব্যবহার করতে পারেন

অ্যালার্ম ক্লক স্ক্রিপ্ট ইনস্টল করুন এবং করুন

ebay-alarm 10 sec -c some command &

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