উত্তর:
সাথে Linux উপর ps
থেকে procps(-ng)
(এবং সবচেয়ে অন্যান্য সিস্টেমের এই যেহেতু POSIX দ্বারা নির্দিষ্ট করা হয়):
ps -o etime= -p "$$"
$$
আপনি যে প্রক্রিয়াটির পিআইডি চেক করতে চান তা কোথায় । এটি বিন্যাসে সময় কাটবে [[dd-]hh:]mm:ss
।
ব্যবহারটি আপনাকে -o etime
জানায় ps
যে আপনি কেবল অতিবাহিত সময় ক্ষেত্রটি চান, এবং এর =
শেষে প্রান্তটি হেডারটিকে দমন করে (ছাড়া, আপনি একটি লাইন পেয়েছেন যা বলে ELAPSED
এবং পরের লাইনে সময়; সাথে, আপনি সময়ের সাথে কেবল একটি লাইন পাবেন) ।
অথবা, লিনাক্সে বা ফ্রিবিএসডি 9.0 বা তার উপরের (এবং সম্ভবত অন্যরা) প্রোপক্স-এনজি টুল স্যুটের (3.3.0 বা তার বেশি) নতুন সংস্করণ সহ, ব্যবহার করুন:
ps -o etimes= -p "$$"
(যোগ করা সহ s
) সময় সেকেন্ডের মতো বিন্যাস করতে, যা স্ক্রিপ্টগুলিতে আরও কার্যকর।
লিনাক্সে, ps
প্রোগ্রামটি এটিকে পায় /proc/$$/stat
, যেখানে ক্ষেত্রগুলির একটি ( man proc
প্রক্রিয়া) প্রক্রিয়া শুরুর সময়। দুর্ভাগ্যক্রমে, এটি সিস্টেম বুট হওয়ার পরে থেকে জিফিজের সময় (লিনাক্স কার্নেলের ক্ষেত্রে একটি নির্বিচারে সময় কাউন্টার) হিসাবে নির্দিষ্ট করা হয়। সুতরাং আপনাকে সিস্টেমটি যে সময় বুট করেছে (তার থেকে /proc/stat
), এই সিস্টেমে প্রতি সেকেন্ডে জিফির সংখ্যাটি নির্ধারণ করতে হবে এবং তারপরে দরকারী ফরম্যাটে সময় অতিবাহিত করার জন্য গণিতটি করুন।
এটি এইচজেডের মান (যা প্রতি সেকেন্ডে জিফিজ) খুঁজে পেতে হাস্যকর জটিল হয়ে উঠেছে। sysinfo.c
প্রোপস প্যাকেজের মন্তব্যে, এ এ) কার্নেল শিরোনাম ফাইলটি অন্তর্ভুক্ত করতে পারে এবং একটি আলাদা কার্নেল ব্যবহার করা হলে পুনরায় কম্পাইল করতে পারে, বি) পসিক্স sysconf()
ফাংশনটি ব্যবহার করে , যা দুর্ভাগ্যক্রমে, সি লাইব্রেরিতে সংকলিত একটি হার্ড-কোডেড মান ব্যবহার করে, বা গ) কর্নেলকে জিজ্ঞাসা করুন, তবে এটি করার কোনও অফিসিয়াল ইন্টারফেস নেই। সুতরাং, ps
কোডটিতে ক্লডেজের একটি সিরিজ রয়েছে যার মাধ্যমে এটি সঠিক মান নির্ধারণ করে। কি দারুন.
সুতরাং এটি সুবিধাজনক যা আপনার পক্ষে এটি ps
করে। :)
ব্যবহারকারীর @ ৩6 @_ নোট হিসাবে, লিনাক্সে (এটি পোর্টেবল নয়), আপনি ডিরেক্টরিটি stat
অ্যাক্সেস, পরিবর্তন বা স্ট্যাটাস পরিবর্তনের তারিখগুলি দেখতে /proc/$$
আবার কমান্ডটি ব্যবহার করতে পারেন (যেখানে আবার $$
আগ্রহের প্রক্রিয়া রয়েছে)। তিনটি সংখ্যা একই হওয়া উচিত
stat -c%X /proc/$$
যুগটি $$
শুরু হওয়ার কয়েক সেকেন্ড পরে আপনাকে প্রক্রিয়াটি শুরু করার সময় দেবে । এটি এখনও আপনি যা চান তা ঠিক নয়, যেহেতু বর্তমান সময় থেকে বিয়োগ করা সময়টি বিয়োগ করার জন্য আপনার এখনও গণিতটি করা দরকার - আমার ধারণা অনুমান যে এরকম কিছু date +%s --date="now - $( stat -c%X /proc/$$ ) seconds"
কাজ করবে তবে এটি কিছুটা কুরুচিপূর্ণ নয়। একটি সম্ভাব্য সুবিধা হ'ল আপনি যদি এর -c%x
পরিবর্তে দীর্ঘ-ফর্ম্যাট আউটপুট ব্যবহার করেন তবে আপনি -c%X
পুরো সংখ্যা সেকেন্ডের চেয়ে বেশি রেজোলিউশন পাবেন। তবে, আপনার যদি এটির প্রয়োজন হয় তবে আপনার সম্ভবত প্রক্রিয়া-নিরীক্ষণের পদ্ধতিটি ব্যবহার করা উচিত কারণ স্ট্যাট কমান্ড চালনার সময় সঠিকতার সাথে হস্তক্ষেপ করতে চলেছে।
=
শিরোনামকে দমন করে। এটি ছাড়াই চেষ্টা করুন, বা চেষ্টা করুনps -p $$ -o etime="Silly Header Here"
etimes
নিজেকে ততটাই পছন্দ করি কারণ এটি মেশিনটি পঠনযোগ্য
sysconf()
এবং তাই আপনাকে সি লাইব্রেরি থেকে হার্ড-কোডড মান দেয়, যেমনটি উল্লেখ করা হয়েছে, তাই না?
সুবহ:
% ps -o stime,time $$
STIME TIME
Jan30 00:00:06
অর্থাত্ এই শেলটি 30 জানুয়ারী থেকে শুরু হয়েছিল এবং সিপিইউর সময়কালের প্রায় 6 সেকেন্ড ছিল।
এই তথ্য পাওয়ার জন্য আরও সুনির্দিষ্ট বা আরও পার্সেবল তবে কম পোর্টেবল উপায় থাকতে পারে। আপনার ps
কমান্ড বা আপনার proc
ফাইল সিস্টেমের ডকুমেন্টেশন পরীক্ষা করুন ।
লিনাক্সের অধীনে, এই তথ্যটি বাস করে /proc/$pid/stat
।
awk '{print "CPU time: " $14+$15; print "start time: " $22}' /proc/$$/stat
সিপিইউ সময় জিফিতে হয়; শেল থেকে জিফ্ফাইয়ের মানটি কীভাবে খুঁজে পাওয়া যায় তা আমি জানি না। আরম্ভের সময়টি বুট সময়ের সাথে সম্পর্কিত (পাওয়া যায় /proc/uptime
)।
sysinfo.c
প্রোপস প্যাকেজে থাকা মন্তব্যগুলির মাধ্যমে , ক) কার্নেল শিরোনাম ফাইলটি অন্তর্ভুক্ত করা যেতে পারে (এবং কোনও আলাদা কার্নেল ব্যবহার করা হলে পুনরায় কম্পাইল করা যায়, খ) পিক্সিক সিসকনফ () ফাংশনটি ব্যবহার করুন, যা দুর্ভাগ্যক্রমে, হার্ড-কোডেড মানটি সংকলিত ব্যবহার করে সি লাইব্রেরি, বা গ) কার্নেলকে জিজ্ঞাসা করুন, এবং এটি করার জন্য কোনও অফিসিয়াল ইন্টারফেস নেই। সুতরাং, কোডটিতে ক্লডেজের একটি সিরিজ রয়েছে যার মাধ্যমে এটি সঠিক মান নির্ধারণ করে। কি দারুন.
ps
র manpage বলে যে time
হল "ক্রমসঞ্চিত CPU- র সময়"। আমি মনে করি যে ওপি যা খুঁজছিল তা হ'ল etime
, বা "প্রক্রিয়া শুরু হওয়ার পরে অতিবাহিত সময়"। pubs.opengroup.org/onlinepubs/000095399/utilities/ps.html
etime
যদিও এটি কমপক্ষে সমর্থন করে ।
ps -eo pid,comm,cmd,start,etime | grep -i X
এক্স প্রক্রিয়াটির নাম
ps -o pid,comm,cmd,start,etime -p X
পিআইডি এক্স দেখুন
ps
-o
আউটপুট ফর্ম্যাট নির্দিষ্ট করতে একটি বিকল্প নেয় এবং উপলব্ধ কলামগুলির মধ্যে একটি etime
। ম্যান পৃষ্ঠা অনুসারে:
প্রক্রিয়া শুরু হওয়ার পর থেকে ইটাইম - অতিবাহিত সময়, [[dd-] hh:] মিমি: এসএস আকারে।
সুতরাং আপনি প্রতিটি প্রক্রিয়াটির পিআইডি এবং অতিবাহিত সময় পেতে এটি চালাতে পারেন:
$ ps -eo pid,etime
আপনি যদি কোনও নির্দিষ্ট পিআইডি এর অতিবাহিত সময় চান (যেমন 12345), আপনি এর মতো কিছু করতে পারেন:
$ ps -eo pid,etime | awk '/^12345/ {print $2}'
( সম্পাদনা করুন : দেখা যাচ্ছে উপরের কমান্ডের জন্য একটি সংক্ষিপ্ত বাক্য গঠন রয়েছে; ম্যাটডেমের উত্তর দেখুন )
এখনও কেন এটি প্রস্তাবিত হয়নি তা নিশ্চিত করুন : লিনাক্সে আপনি stat()
আপনার পিআইডি-র জন্য / proc / [nnn] ডিরেক্টরি করতে পারেন ।
এই আচরণটি প্রসেস শুরুর সময় ফিরিয়ে আনার জন্য ডিজাইন করা হয়েছে, এটি উচ্চ রেজোলিউশনে এটি করতে পারে এবং কার্নেল জিফিস হ্যাক ছাড়া সঠিকভাবে কর্নেল করতে পারে যেহেতু কার্নেলটি (স্পষ্টতই) কেবল প্রাসঙ্গিক তথ্য পরীক্ষা করতে পারে। অ্যাক্সেস, ডেটা-পরিবর্তন এবং স্থিতি পরিবর্তন ক্ষেত্রগুলি সমস্ত প্রক্রিয়া শুরুর সময়টি ফিরিয়ে দেয়।
সর্বোপরি, আপনি stat(1)
শেলটি বা b প্রিয়_pramramming_language stat(2)
থেকে উপযুক্ত বাঁধাই করতে পারেন, যাতে আপনার একটি বাহ্যিক প্রক্রিয়া আরম্ভ করার প্রয়োজনও নাও হতে পারে।
লক্ষ্য করুন যে এটি ফ্রিবিএসডি-তে কাজ করে না/usr/compat/linux/proc
; অ্যাক্সেস / পরিবর্তন / স্থিতি-পরিবর্তনের সময়গুলি এখনকার সময় এবং জন্মের সময়টি ইউনিক্সের যুগ। আপনি যদি আমাকে জিজ্ঞাসা করেন তবে বেশ বোকা সমর্থন নেই isn't
stat /proc/4480
এটি আপনাকে প্রক্রিয়াটির জন্ম, পরিবর্তন, পরিবর্তন এবং অ্যাক্সেসের তারিখ দেয়। আপনার যদি প্রক্রিয়া আইডি দরকার হয় তবে কেবল "শীর্ষ" ব্যবহার করুন
আপনি যদি সময় চালাতে পারেন এবং তারপরে একটি কমান্ড কার্যকর করতে পারেন তবে আপনি যা খুঁজছেন ঠিক তা পাবেন। আপনি ইতিমধ্যে চলমান কমান্ডের বিরুদ্ধে এটি করতে পারবেন না।
[0]% সময় নিদ্রা 20
ঘুম 20 0.00s ব্যবহারকারী 0.00s সিস্টেম 0% সিপিইউ 20.014 মোট
$ ps -eo lstart
শুরু সময় পেতে
$ ps -eo etime
সময়কাল / অতিবাহিত সময় পান
$ ps -eo pid,lstart,etime | grep 61819
PID STARTED ELAPSED
61819 Mon Sep 17 03:01:35 2018 07:52:15
61819 প্রক্রিয়া আইডি।
সেকেন্ডে সময় কেটে গেছে: expr $(date +"%s") - $(stat -c%X /proc/<PID HERE>)
date +%s --date="now - $( stat -c%X /proc/$$
etime=
টাইপো কি ? আমি কেবলetime
ম্যান পেজগুলিতেই খুঁজে পেতে পারি ।