কবে থেকে একটি প্রক্রিয়া শুরু হয়েছিল


31

কখন কোন প্রক্রিয়া শুরু হয়েছিল তা জানতে, আমার প্রথম অনুমানটি হ'ল /proc/<pid>/cmdlineশেষ সময়টি কখন লেখা / সংশোধন করা হয়েছিল তা পরীক্ষা করা check

psএছাড়াও একটি STARTক্ষেত্র দেখায় । আমি ভাবলাম এই উভয় উত্সই এক হবে। কখনও কখনও তারা এক হয় না। এটা কিভাবে হতে পারে?


উত্তর:


44

অন্তত লিনাক্সে, আপনি এটিও করতে পারেন:

ps -o lstart= -p the-pid

আরও কার্যকর শুরু সময় আছে।

তবে নোট করুন যে এটি প্রক্রিয়াটি শুরু হওয়ার সময় নয়, আপাতত যে কমান্ডটি বর্তমানে এটি চালাচ্ছে তার অনুরোধ করা উচিত নয়। প্রক্রিয়াগুলি (এবং সাধারণত করতে পারে) তাদের জীবদ্দশায় একাধিক আদেশ চালাতে পারে। এবং কমান্ডগুলি কখনও কখনও অন্যান্য প্রক্রিয়াগুলিকে স্প্যান করে।

/procলিনাক্সের ফাইলগুলির কমপক্ষে (কমপক্ষে) সাধারণত সেই তারিখটি থাকে যখন এই ফাইলগুলি ইনস্ট্যান্ট করা হয়, যা কোনও কিছু প্রথমবার এগুলি অ্যাক্সেস করার বা ডিরেক্টরি সামগ্রীর তালিকাতে চেষ্টা করার চেষ্টা করবে।

এই ক্ষেত্রে:

$ sh -c 'date +%T.%N; sleep 3; echo /proc/"$$"/xx*; sleep 3; stat -c %y "/proc/$$/cmdline"'
13:39:14.791809617
/proc/31407/xx*
2013-01-22 13:39:17.790278538 +0000

প্রসারিত /proc/$$/xx*হওয়ার ফলে শেলটি সামগ্রীটি পড়তে পারে /proc/$$যার ফলে cmdlineফাইলটি তাত্ক্ষণিকভাবে বন্ধ হয়ে যায়।

আরও দেখুন: / প্রো // এফডি তে সকেটের টাইমস্ট্যাম্প


11

proc ভার্চুয়াল ফাইল সিস্টেম তাই আমি কোনও ফাইলের স্থিতির তথ্যের উপর নির্ভর করি না।

প্রক্রিয়া শুরুর সময়টি 22 / proc / PID / স্টেট কলামে অবস্থিত । এটি সিস্টেম বুটের পরে জিফিগুলিতে দেওয়া হয়। এটিকে সেকেন্ডে রূপান্তর করতে আপনাকে এটিকে ভাগ করতে হবে যা বেশিরভাগের জন্য 100sysconf(_SC_CLK_TCK) সিস্টেমে (তবে সমস্ত নয়!)।

সিস্টেম বুটের সময় পেতে আপনি সেকেন্ডে বর্তমান আপটাইম নির্ধারণ করুন যা / প্রোক / আপটাইমের প্রথম মান

এই দুটি সংখ্যা থাকা আপনি দ্বিতীয়টি থেকে প্রথমটি বিয়োগ করেন এবং প্রোগ্রামটি শুরু করার পরে আপনি পাস হওয়া সেকেন্ডের সংখ্যা পান।

উদাহরণ ( পিডজিনের জন্য ):

PID=$(pidof pidgin)
STARTTIME=$(awk '{print int($22 / 100)}' /proc/$PID/stat)
UPTIME=$(awk '{print int($1)}' /proc/uptime)
NOW=$(date +%s)
DIFF=$((NOW - (UPTIME - STARTTIME)))
date -d @$DIFF

দ্রষ্টব্য: pidofমাল্টিপ PID গুলি ফেরত দিলে এই সাধারণ উদাহরণটি কাজ করে না ।


প্রকল্প / <pid> / সেমিডলাইন কখন লিখিত হয় সে সম্পর্কে কোনও ধারণা? ভাল যে কোনও প্রকল্পের জন্য </ pid> এন্ট্রি।
22:30

2
সাধারণত যখনই আপনি সেগুলি পড়ার চেষ্টা করেন এবং এগুলির বেশিরভাগের মধ্যে একটি গতিশীল বিষয়বস্তু থাকে ততক্ষণ এই ফাইলগুলি কার্নেল দ্বারা গতিশীলভাবে তৈরি করা হয় । সেমিডলাইন করে না তবে আমি কল্পনাও করতে পারি না যে অফিসিয়াল নীতি রয়েছে যা প্রসেস শুরু হওয়ার পরে একবার তৈরি করতে হবে এবং আবার কখনও স্পর্শ করা যাবে না।
স্কাই

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