একটি লিনাক্স প্রক্রিয়াটির আপটাইম কীভাবে খুঁজে পাওয়া যায়


69

প্রদত্ত লিনাক্স প্রক্রিয়াটির আপটাইম কীভাবে খুঁজে পাব।

ps aux | grep gedit | grep -v grep

আমাকে পুরোপুরি প্রচুর তথ্য দেয় যার মধ্যে প্রক্রিয়াটি শুরু হওয়ার সময় অন্তর্ভুক্ত। আমি বিশেষত স্যুইচটি খুঁজছি যা মিলিসেকেন্ডে কোনও প্রক্রিয়াটির আপটাইম দেয়।

ধন্যবাদ

উত্তর:


113

যেমন "আপটাইম" এর বিভিন্ন অর্থ রয়েছে, এখানে একটি দরকারী কমান্ড রয়েছে।

ps -eo pid,comm,lstart,etime,time,args

এই কমান্ডটি বিভিন্ন প্রক্রিয়া সম্পর্কিত বিভিন্ন কলাম সহ সমস্ত প্রক্রিয়া তালিকাভুক্ত করে। এটিতে নিম্নলিখিত কলামগুলি রয়েছে:

PID COMMAND                          STARTED     ELAPSED     TIME COMMAND

PID= প্রক্রিয়া আইডি
প্রথম COMMAND= কেবল বিকল্প এবং বিনা যুক্তি ছাড়াই কমান্ডের নাম
STARTED= প্রক্রিয়া শুরু
ELAPSEDহওয়ার পরের সঠিক সময় = প্রসেস শুরু হওয়ার পরে সময় কাটিয়েছে ( প্রাচীরের ঘড়ির সময় ), ফর্ম্যাট [[dd-] hh:] মিমি: এসএস TIME= संचयी সিপিইউ সময়, "[ডিডি-] এইচ: মিমি: এসএস" ফর্ম্যাট
সেকেন্ড COMMAND= আবার কমান্ড, তার সমস্ত প্রদত্ত বিকল্প এবং যুক্তি সহ


1
খুশী হলাম। আমি etimesনিজেকে পছন্দ করি - সেকেন্ডের মধ্যে সময় অতিবাহিত - সুতরাং এটি মেশিনটি পঠনযোগ্য
আসফান্দ কাজী

1
প্রশ্নটি ছিল মিলিসেকেন্ডের স্থির
yohann.martineau

দুর্ভাগ্যক্রমে, ব্যস্তবক্সে 1.29.3 ইটাইমের ফর্ম্যাটটি ভেঙেছে, সুতরাং বিশ্লেষণের জন্য এটির উপর নির্ভর করবেন না।
ড্যানি দুলাই

10

আপনার যদি সীমাবদ্ধ সংস্করণ psপাওয়া যায় তবে আপনি busyboxটাইমস্ট্যাম্পটি দেখে প্রক্রিয়া শুরুর সময় পেতে পারেন /proc/<PID>। উদাহরণস্বরূপ, আপনি যে পিডটি দেখতে চান তা 55 হয় ...

# ls -al /proc | grep 55
dr-xr-xr-x    7 root     root             0 May 21 05:53 55

... এবং তারপরে এটি বর্তমান তারিখের সাথে তুলনা করুন ...

# date
Thu May 22 03:00:47 EDT 2014

এটি বর্তমান কার্নেলগুলিতে আর কাজ করবে না বলে মনে হয়।
goertzenator

7

আমি মনে করি আপনি কেবল চালাতে পারবেন:

$ stat /proc/1234

প্রক্রিয়া আইডি হচ্ছে 1234।

উদাহরণস্বরূপ দুটি প্রক্রিয়া একই ঘন্টা মিনিট সেকেন্ডে শুরু হয়েছিল তবে একই মিলি সেকেন্ডে নয়:

$ stat /proc/9355
...
Access: 2017-11-13 17:46:39.778791165 +0100
Modify: 2017-11-13 17:46:39.778791165 +0100
Change: 2017-11-13 17:46:39.778791165 +0100
$ stat /proc/9209
...
Access: 2017-11-13 17:46:39.621790420 +0100
Modify: 2017-11-13 17:46:39.621790420 +0100
Change: 2017-11-13 17:46:39.621790420 +0100

4

এত সহজ জিনিসটির সঠিক উত্তর 5 বছর পরে দেওয়া হয় না?

আমি মনে করি না আপনি সঠিকভাবে মিলিসেকেন্ডগুলি পেতে পারেন। যেমন। আপনি যদি দেখেন man procfsএবং /proc/$$/statফিল্ডটাইম হিসাবে ফিল্ড 22 রয়েছে যা "ক্লক টিক্স" এ রয়েছে তবে আপনার আরও কিছু সুনির্দিষ্ট হবে তবে ক্লক টিকগুলি পুরোপুরি ধ্রুব হারে চলেছে না ('ওয়াল ক্লক টাইম'র তুলনায়) এবং হবে বন্ধ থাকুন ... ঘুমোতে এবং কিছু নির্দিষ্ট জিনিস (এনটিপিডি আমি অনুমান করি) এটি অফসেট করুন। উদাহরণস্বরূপ এনটিপিডি চালিত মেশিনে, 8 দিন আপটাইম সহ এবং কখনও ঘুমোয়নি, dmesg -Tএকই সমস্যা আছে (আমার মনে হয় ...), এবং আপনি এটি এখানে দেখতে পারেন:

# date; echo h > /proc/sysrq-trigger; dmesg -T | tail -n1 ; date
Fri Mar  3 10:26:17 CET 2017
[Fri Mar  3 10:26:16 2017] sysrq: SysRq : HELP : loglevel(0-9) reboot(b) crash(c) terminate-all-tasks(e) memory-full-oom-kill(f) kill-all-tasks(i) thaw-filesystems(j) sak(k) show-backtrace-all-active-cpus(l) show-memory-usage(m) nice-all-RT-tasks(n) poweroff(o) show-registers(p) show-all-timers(q) unraw(r) sync(s) show-task-states(t) unmount(u) force-fb(V) show-blocked-tasks(w) 
Fri Mar  3 10:26:17 CET 2017

এখানে কয়েক সেকেন্ড:

# example pid here is just your shell
pid=$$

# current unix time (seconds since epoch [1970-01-01 00:00:00 UTC])
now=$(date +%s)

# process start unix time (also seconds since epoch)
# I'm fairly sure this is the right way to get the start time in a machine readable way (unlike ps)...but could be wrong
start=$(stat -c %Y /proc/"$pid")

# simple subtraction (both are in UTC, so it works)
age=$((now-start))

printf "that process has run for %s seconds\n" "$age"

3

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

নতুনগুলির মধ্যে এটি সহজ:

ps -o etimes -p <PID>
ELAPSED
339521

এর মত সহজ. সময়টি সেকেন্ডে উপস্থিত থাকে। আপনার যা প্রয়োজন তা করুন। কিছু পুরানো বাক্সের সাথে পরিস্থিতি আরও শক্ত, কারণ কোনও সময় নেই। যে কেউ নির্ভর করতে পারে:

ps -o etime -p <PID>
ELAPSED
76-03:26:15

এটি "কিছুটা" অদ্ভুত দেখাচ্ছে কারণ এটি ডিডি-এইচ: মিমি: এসএস ফর্ম্যাটে রয়েছে look পরবর্তী গণনার জন্য উপযুক্ত নয়। আমি এটি সেকেন্ডে পছন্দ করতাম, তাই আমি এটি ব্যবহার করেছি:

ps -o etime -p <PID> --no-headers | awk -F '(:)|(-)' 'BEGIN{a[4]=1;a[3]=60;a[2]=3600;a[1]=86400;s=0};{for (i=NF;i>=1;i--) s=s+a[i]*$i}END{print s}'
339544

এটি পুরানো সিস্টেমে এটি করার একটি দুর্দান্ত উপায়, ধন্যবাদ :)
রোবটজনি

ইটাইমের আউটপুটটিকে বিশ্লেষণ করবেন না কারণ ব্যস্তবক্স ১.২৯.৩ ফর্ম্যাটটি পরিবর্তন করেছে। পরিবর্তে স্ট্যাটিক + / proc পদ্ধতিটি ব্যবহার করুন
ড্যানি দুলাই

-1
[root@ip-x-x-x-x ec2-user]# ps -p `pidof java` -o etimes=
 266433

pidof java => জাভা প্রক্রিয়াটির জন্য প্রক্রিয়া আইডি

etimes= => সেকেন্ডে সময় এবং '=' সময় শিরোনাম অপসারণ করা হয়

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