কোনও প্রক্রিয়া যদি নির্দিষ্ট সময়ের জন্য শান্ত হয়ে যায় তবে তাকে হত্যা করুন


9

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

উত্তর:


8

সহ zsh, আপনি করতে পারেন:

zmodload zsh/system
coproc your-command
while :; do
  sysread -t 10 -o 1 <&p && continue
  if (( $? == 4 )); then
    echo "Timeout" >&2
    kill $!
  fi
  break
done

টাইমআউট সহ আউটপুট থেকে পড়ার -tবিকল্পটি ব্যবহার করার ধারণাটি ।sysreadyour-command

নোট করুন এটি your-commandএর পাইপকে পাইপ বানায় pipe এটি হতে পারে যে your-commandএটি যখন কোনও টার্মিনালে না যায় তখন তার আউটপুটটি বাফার শুরু করে, এক্ষেত্রে আপনি দেখতে পাবেন যে এটি কিছুক্ষণের মধ্যে আউটপুট দেয় না, তবে কেবল সেই বাফারিংয়ের কারণে নয়, কারণ এটি কোনওভাবে ঝুলিয়ে রাখা হয়েছে

আপনি stdbuf -oL your-commandলাইন-বাফারিং পুনরুদ্ধার করে (যদি আপনার কমান্ডটি স্টডিও ব্যবহার zptyকরে ) বা coprocটার্মিনাল আউটপুট জাল করার পরিবর্তে ব্যবহার করতে পারেন ।

সহ bash, আপনাকে যদি নির্ভর করে তবে ddজিএনইউতে নির্ভর করতে হবে timeout:

coproc your-command
while :; do
  timeout 10 dd bs=8192 count=1 2> /dev/null <&${COPROC[0]} && continue
  if (($? == 124)); then
    echo Timeout >&2
    kill "$!"
  fi
done

পরিবর্তে coproc, আপনি প্রক্রিয়া বিকল্প ব্যবহার করতে পারেন:

while :; do
  timeout 10 dd bs=8192 count=1 2> /dev/null <&3 && continue
  if (($? == 124)); then
    echo Timeout >&2
    kill "$!"
  fi
done 3< <(your-command)

(এটি এতে কাজ করে না zshবা ksh93কারণ সেখানে $!পিড থাকে না your-command)।


1
ওহে! ধন্যবাদ, আপনি কি এটি মন্তব্য করতে পারেন তাই আমি বুঝতে পারি যে এটি কী করছে?
বেনোজো

0

আমি STDOUT কে একটি ফাইলে পুনর্নির্দেশ করব এবং তারপরে ফাইলটির এমটাইম একটি প্রান্তিকের চেয়ে বেশি হলে প্রক্রিয়াটি পুনরায় আরম্ভ করতে মনির টাইমস্ট্যাম্প টেস্টিং ব্যবহার করব ।

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