সময়সীমা, ব্রেকিং পাইপ এবং ডাব্লিউসি


20

আমার দ্রুত কিছু ডেকম্প্রেশন প্রোগ্রাম বেনমার্ক করার একটি ধারণা ছিল। যেমন জিজেডের জন্য, আমি কমান্ডটি চালিত করব:

timeout 10 zcat foo.gz | wc -c

যেটি 10 ​​সেকেন্ডের মধ্যে ডিকম্প্রেসারটি বের করতে পারে এমন পরিমাণের পরিমাণ পরিমাপ করবে।

একমাত্র সমস্যাটি হ'ল এটি কার্যকর হয় না: যেমন zcat নিহত হয়, ডব্লিউসিও মারা যায়, তাই আমি বাইট গণনাটি পাই না, কেবল একটি Terminatedবার্তা।

সুতরাং, প্রশ্নটি হ'ল: ডাব্লিউসি থেকে গণনা পাওয়ার কোনও উপায় আছে , হয় কোনওভাবে সিগন্যালটি ব্লক করে, বা ডাব্লাবির পরিবর্তে একটি বিকল্প ব্যবহার করুন যা কোনও মেয়াদ সংকেত পেয়েও ফলাফল ছাপায়।


অবশ্যই, বিকল্প আছে:

  1. একটি অস্থায়ী ফাইলে লেখা:
    timeout 10 zcat foo.gz > /dev/shm/x ; du -sb /dev/shm/x ; rm -r /dev/shm/x এটির সাথে সমস্যাটি হ'ল প্রচুর মেমরি ব্যবহার করা হয় এবং এতে কিছু পারফরম্যান্স পেনাল্টিও থাকতে পারে।

  2. পরিবর্তে ইউলিমিট ব্যবহার করা:
    ulimit -t 10; zcat foo.gz | wc -c
    এটিও কাজ করে তবে কেবল সিপিইউর সময় পরিমাপ করে, তাই আই / ও এর কারণে ধীরগতি হয় (উদাহরণস্বরূপ কারণ সংক্ষেপণটি আরও খারাপ, এবং আরও বাইটগুলি ডিস্ক থেকে পড়তে হবে) পরিমাপ করা হয় না।

  3. ছোট টেস্ট ফাইল তৈরি করা:
    আচ্ছা, এটি অবশ্যই কাজ করতে পারে এবং সর্বোত্তম সমাধান হতে পারে। তবে এটি প্রচুর অস্থায়ী ফাইল তৈরি করে।


6
"ব্রেকিং পাইপ এবং ডাব্লুসিটি" পড়ার সময় আমি প্রথমে ভেবেছিলাম আপনার নদীর গভীরতানির্ণয় নিয়ে সমস্যা হচ্ছে!
dr01

উত্তর:


21

আপনি একটি সাব-শেলের মধ্যে সময়সীমা কমান্ড স্থাপন করতে এবং এটি সফল করতে পারেন:

( timeout 10 <command> || true ) | wc -c

3
ব্যর্থ কমান্ড সফল করা? ওহ, এটি দেখতে খুব খারাপ দেখাচ্ছে: ডি
এরথিল

17
@ ইরাথিয়েল চান দুষ্ট অবস্থায় হাসি? এটি ব্যবহার করে দেখুন (এটি উপরের সমতুল্য):(timeout 10 <command> || :) | wc -c
মার্কো

1
আমি সাবসেল ব্যবহার করার চেষ্টা করেছি, তবে এটি সফল করার বিষয়ে ভাবি নি। অসাধারণ!
P.Péter

2

পোস্ট করার ঠিক পরে, প্রক্রিয়াটির জন্য নামযুক্ত পাইপগুলি ব্যবহার করার জন্য আমার একটি চিন্তা ছিল:

mkfifo /tmp/x; wc -c /tmp/x & timeout 10 zcat foo.gz > /tmp/x &

এটি কাজ করে বলে মনে হচ্ছে।

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