পিএস এর জন্য সিপিউটাইমের আউটপুট ফর্ম্যাট করুন


13

আমি এমন একটি স্ক্রিপ্ট লেখার চেষ্টা করছি যা কোনও বিরতিতে (গ্রাফ তৈরি করতে) কোনও প্রক্রিয়ার সিপিইউ ব্যবহার পর্যবেক্ষণ করতে পারে।

এখনও অবধি, আমি যে কমান্ডটি ব্যবহার করছি তা এটি

ps -p $PROCID -o cputime,etimes

আমার একমাত্র উদ্বেগ হ'ল সিপিটাইম-এর আউটপুট প্রদর্শিত হবে [dd]hh:mm(বা অনুরূপ কিছু, এখন আমার মাথার উপরের অংশটি মনে করতে পারে না)

সেকেন্ডে সিপুটাইম ফর্ম্যাট করার কোনও উপায় কি, সেকেন্ডে সময় কাটানোর মতো ইটাইম -> এটাইমসের মতো?

সম্পাদনা করুন: এটি বর্তমানে আউটপুট আমি গ্রহণ করছি

2-03:01:33 2653793

আমি প্রথম প্যারামিটারটি কয়েক-ঘন্টা: মিনিট: সেকেন্ডে নয়, সেকেন্ডে ফরম্যাট করতে চাই।


আপনি দয়া করে এখন প্রাপ্ত আউটপুট এবং আপনি যে আউটপুটটি পেতে চান তা যুক্ত করতে পারেন?
সহজভাবে_আমি

@ সিম্পলি_মে আমি পোস্টটি সম্পাদনা করেছি
ড্রেডিসকুল

@ জন 1024 হ্যাঁ, এটিই তো দিনের পরিমাণ।
dreadiscool

উত্তর:


9

এটি প্রথমবারকে সেকেন্ডে রূপান্তরিত করে:

ps -p $PROCID -o cputime,etimes | awk -F'[: ]+' '/:/ {t=$3+60*($2+60*$1); print t,$NF}'

উদাহরণ হিসাবে, পিএস কমান্ডটি তৈরি করে:

$ ps -p 5403 -o cputime,etimes
    TIME ELAPSED
01:33:38 1128931

awkকমান্ড প্রক্রিয়া এবং আয়:

ps -p 5403 -o cputime,etimes | awk -F'[: ]+' '/:/ {t=$3+60*($2+60*$1); print t,$NF}'
5618 1128931

ব্যাখ্যা

  • -F'[: ]+'

    এটি করোন এবং স্পেস উভয়কে ফিল্ড বিভাজক হিসাবে বিবেচনা করতে বিশ্রীকে বলে। এইভাবে, ঘন্টা, মিনিট এবং সেকেন্ড পৃথক ক্ষেত্র হিসাবে প্রদর্শিত হবে।

  • /:/ {t=$3+60*($2+60*$1); print t,$NF}

    প্রাথমিকভাবে /:/কোডটি কেবলমাত্র লাইনগুলিতে কাজ করার ক্ষেত্রে সীমাবদ্ধ করে that এটি শিরোনামের লাইনগুলি সরিয়ে দেয়। সেকেন্ডের সংখ্যাটি ঘন্টা, মিনিট, সেকেন্ডের মাধ্যমে গণনা করা হয় t=$3+60*($2+60*$1)। এর জন্য ফলস্বরূপ মানটি tঅতিবাহিত সময়ের পাশাপাশি ছাপানো হয়।

হ্যান্ডলিংয়ের দিনগুলি

যদি psদিন, ঘন্টা, মিনিট, সেকেন্ড উত্পাদন করে তবে :

2-03:01:33

তারপরে, পরিবর্তে এই কোডটি ব্যবহার করুন:

ps -p $PROCID -o cputime,etimes | awk -F'[-: ]+' '/:/ {t=$4+60*($3+60*($2+24*$1)); print t,$NF}'

যদি দিনগুলি আউটপুট থেকে চালিত নাও হতে পারে, তবে এই সমন্বয় কমান্ডটি ব্যবহার করুন:

ps -p $PROCID -o cputime,etimes | awk -F'[-: ]+' '/:/ && NF==5 { t=$4+60*($3+60*($2+24*$1)); print t,$NF} /:/ && NF==4 {t=$3+60*($2+60*$1); print t,$NF}'

আমার ভুল হয়ে থাকলে আমাকে ক্ষমা করুন, তবে দেখে মনে হচ্ছে না যে এই আদেশটি দিনগুলিতে
গ্রাহ্য করছে

এটি সঠিক: আমার সিস্টেম কোনও প্রক্রিয়ার জন্য দিন দেখায় নি। আমি অনুমান করতে পারি কোন দিনগুলি দেখতে দেখতে পারে তবে আপনি কি প্রকৃত উদাহরণ দিতে পারেন?
1024

2-03: 01: 33 হল 2 দিন, 3 ঘন্টা, 1 মিনিট এবং 33 সেকেন্ড। দিনগুলি যদিও সর্বদা প্রেন্টেন্ট হয় না। আমার সিস্টেমে কেবল প্রক্রিয়াটি যদি 24 ঘন্টােরও বেশি সময় ধরে বেঁচে থাকে তবে কেবলমাত্র এটিই চাপ দেওয়া হয়েছে।
বিটিডব্লিউ

@ ব্যবহারকারী 1772510 উত্তরগুলি হ্যান্ডেল করার জন্য আপডেট হয়েছে।
1024

আপনার সকল সহায়তার জন্য ধন্যবাদ, আমি যদি উত্সাহ দিতে পারতাম আমিও উন্নত করতে পারি (এই সম্প্রদায়ের যথেষ্ট প্রতিনিধি নয়) আমি গভীরভাবে এটির প্রশংসা করি!
dreadiscool

2

আপনি যদি গেমটিতে বিশৃঙ্খলা আনতে না চান, একটি খাঁটি বাশ সমাধান (টি_এস্টে ফর্ম্যাট স্ট্রিং থাকে, সেকেন্ডের মধ্যে ডিকোডড সময়টি t_sec থাকে):

# Decode the CPU time format [dd-]hh:mm:ss.
IFS="-:" read c1 c2 c3 c4 <<< "$t_str"
if [ -n "$c4" ]
then
  t_sec=$((10#$c4+60*(10#$c3+60*(10#$c2+24*10#$c1))))
else
  t_sec=$((10#$c3+60*(10#$c2+60*10#$c1)))
fi

0

এটি কোন অপারেটিং সিস্টেমের জন্য তা নির্দিষ্ট করে না; যদি এটি লিনাক্স হয় এবং আপনি যদি কোনও নির্দিষ্ট প্রক্রিয়া পর্যবেক্ষণ করতে আগ্রহী হন তবে আপনাকে এটি পার্স করা আরও সার্থক মনে হতে পারে /proc/$PROCID/stat- বিশদটির proc(5)জন্য ম্যানুয়াল পৃষ্ঠাটি দেখুন।

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