จะตรวจสอบว่ากระบวนการทำงานนานแค่ไหนหลังจากที่ทำเสร็จแล้ว?


14

ขณะนี้ฉันกำลังใช้สิ่งต่อไปนี้เพื่อตรวจสอบว่ากระบวนการใช้งานจริงนานเท่าใด:

ps -eo uid,pid,etime | egrep '^ *MY_ID' | egrep 'PID_OF_PROCESS'

และนั่นเป็นผลลัพธ์ต่อไปนี้:

MY_ID PID_OF_PROCESS       00:16

อย่างไรก็ตามหลังจากกระบวนการสิ้นสุดลงฉันต้องการค้นหาระยะเวลาที่มันใช้งานได้จริง แต่ฉันไม่สามารถหาข้อมูลนั้นได้

คำตอบ:


15

ฉันไม่คิดว่าเป็นไปได้ที่จะได้รับข้อมูลดังกล่าวหลังจากกระบวนการเสร็จสิ้นแล้ว

หากคุณทราบล่วงหน้าว่าคุณจะต้องการข้อมูลนั้นคุณสามารถเรียกใช้คำสั่งเป็น

time <command>

เช่น

~> time sleep 1

real        0m1.003s
user        0m0.002s
sys         0m0.001s

7

ตรวจสอบว่าชุดยูนิกซ์ของคุณรองรับการบัญชีกระบวนการหรือไม่ ตัวอย่างเช่นในอูบุนตู (และมากที่สุดในลินุกซ์อื่น ๆ ) นี้ให้บริการโดยacctแพคเกจ ติดตั้งบัญชี http://bit.ly/software-small หากระบบย่อยการบัญชีกำลังทำงานอยู่lastcommแสดงข้อมูลเกี่ยวกับกระบวนการที่เสร็จสิ้นรวมถึงเวลาตัวประมวลผลที่ใช้ (เวลานาฬิกาแขวนไม่ได้บันทึก)

หากคุณจำเป็นต้องกำหนดเวลาสำหรับโปรแกรมเฉพาะวิงวอนผ่านtime

หากคุณต้องการข้อมูลที่แม่นยำยิ่งขึ้นให้ใช้แพ็คเกจการตรวจสอบที่ดียิ่งขึ้นตัวอย่างเช่นระบบย่อยการตรวจสอบภายใต้ Linux


คำตอบนี้ทำให้ภาพหายไป
mattdm

@mattdm โอ้มันเป็นลิงก์ที่เป็นมาตรฐานของAsk Ubuntuในการลิงก์ไปยังapt.ubuntu.comรูปภาพนั้นถูกลบออกจาก imgur ฉันต้องใช้มันหลายร้อยครั้งใน SE และฉันไม่ได้คาดหวังในการแก้ไขทั้งหมด ฉันยังคงถือ SE อยู่ทำการทดแทนอัตโนมัติซึ่งพวกเขาจะไม่ทำเพราะพวกเขาไม่ได้ทำเมื่อเอกสาร Java ทั้งหมดถูกย้าย
Gilles 'SO- หยุดความชั่วร้าย'

1

ก่อนที่ฉันจะเห็นคำถามนี้และคำตอบของฉันฉันทำสคริปต์ทุบตีเล็กน้อย สิ่งนี้ยังมีประโยชน์หากคุณไม่มีสิทธิ์รูทและไม่ได้ติดตั้ง acct หรือคุณไม่ได้เรียกใช้คำสั่งของคุณโดยตรง (ในกรณีของฉัน: ฉันใช้ gui เพื่อตั้งค่ากระบวนการพื้นหลัง) คุณต้องได้รับ PID ก่อนที่จะทำงาน (ใครสนใจที่จะเพิ่มลงในสคริปต์? :)

#!/bin/bash

echo "Checking run time"
read -p "What is the pid? " PID

while true; do
    # sleep needed! used to reduce cpu usage and mass of output
    sleep 5
    ps -eo uid,pid,etime | egrep '$PID' | egrep '$UID'
done

ด้วยวิธีนี้ค้นหา PID ของ PROCESS_NAME

ps aux | awk 'NR == 1 || /PROCESS_NAME/'

อันที่จริงฉันพยายามรวม USER-ID และ PID เพื่อทำให้สคริปต์ไม่เป็นเรื่องจริง แต่มันไม่ง่ายเลย ... ps -eo uid,pid,etime | egrep '$UID[[:space:]]$PID'ดูเหมือนจะไม่ทำงานเสมอ ...


สิ่งที่ฉันต้องการ! ฉันพบว่าบน Centos 6.8 ฉันต้องละเว้นคำพูดที่อยู่รอบ ๆ '$ PID' และข้ามegrep '$UID'เพราะฉันเป็นผู้ใช้คนเดียวที่ชอบ:ps -eo uid,pid,etime | egrep $PID
Chris Adams
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.