หากต้องการทราบว่าเมื่อใดที่กระบวนการเริ่มต้นการคาดเดาครั้งแรกของฉันคือการตรวจสอบเวลาที่/proc/<pid>/cmdline
ถูกเขียน / แก้ไขในครั้งสุดท้าย
ps
ยังแสดงSTART
ฟิลด์ ฉันคิดว่าแหล่งข้อมูลทั้งสองนี้จะเหมือนกัน บางครั้งพวกเขาก็ไม่เหมือนกัน นั่นเป็นอย่างไร
หากต้องการทราบว่าเมื่อใดที่กระบวนการเริ่มต้นการคาดเดาครั้งแรกของฉันคือการตรวจสอบเวลาที่/proc/<pid>/cmdline
ถูกเขียน / แก้ไขในครั้งสุดท้าย
ps
ยังแสดงSTART
ฟิลด์ ฉันคิดว่าแหล่งข้อมูลทั้งสองนี้จะเหมือนกัน บางครั้งพวกเขาก็ไม่เหมือนกัน นั่นเป็นอย่างไร
คำตอบ:
อย่างน้อยใน Linux คุณสามารถทำสิ่งต่อไปนี้
ps -o lstart= -p the-pid
เพื่อให้มีเวลาเริ่มต้นที่เป็นประโยชน์มากขึ้น
โปรดทราบว่าเป็นเวลาที่กระบวนการเริ่มต้นไม่จำเป็นต้องเป็นเวลาที่คำสั่งที่กำลังเรียกใช้งานอยู่ในปัจจุบัน กระบวนการสามารถ (และโดยทั่วไปทำ) เรียกใช้มากกว่าหนึ่งคำสั่งในช่วงชีวิตของพวกเขา และคำสั่งบางครั้งวางไข่กระบวนการอื่น
mtimes ของไฟล์ใน/proc
Linux (อย่างน้อย) มักเป็นวันที่ไฟล์เหล่านั้นถูกสร้างอินสแตนซ์ซึ่งจะเป็นครั้งแรกที่สิ่งที่พยายามเข้าถึงพวกเขาหรือรายการเนื้อหาของไดเรกทอรี
ตัวอย่างเช่น
$ 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
ไฟล์นั้นถูกอินสแตนซ์
ดูเพิ่มเติม: การประทับเวลาของซ็อกเก็ตใน / proc // fd
procเป็นระบบไฟล์เสมือนดังนั้นฉันจะไม่พึ่งพาข้อมูลสถานะไฟล์ใด ๆ
เวลาเริ่มต้นของกระบวนการตั้งอยู่ที่/ proc / PID / สถิติคอลัมน์22 มันได้รับในระยะเวลาอันสั้นหลังจากการบูตระบบ ในการแปลงเป็นวินาทีคุณต้องหารด้วยsysconf(_SC_CLK_TCK)
100 สำหรับระบบส่วนใหญ่ (แต่ไม่ใช่ทั้งหมด!)
จะได้รับเวลาของระบบบูตคุณตรวจสอบสถานะการออนไลน์ในปัจจุบันในไม่กี่วินาทีซึ่งเป็นค่าแรกของ/ proc / uptime
เมื่อมีตัวเลขสองตัวนี้คุณจะลบตัวเลขแรกจากวินาทีและคุณจะได้จำนวนวินาทีที่ผ่านไปนับตั้งแต่เริ่มต้นโปรแกรม
ตัวอย่าง (สำหรับpidgin ):
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 หลายรายการ