Answers:
ලිනක්ස් සමග ps
සිට procps(-ng)
(මෙම POSIX විසින් නිශ්චිතව දක්වා ඇති නිසා සහ බොහෝ අනෙකුත් පද්ධති):
ps -o etime= -p "$$"
$$
ඔබට පරීක්ෂා කිරීමට අවශ්ය ක්රියාවලියේ PID එක කොහේද? මෙය ගත වූ කාලය ආකෘතියෙන් ආපසු ලබා දෙනු ඇත [[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
), මෙම පද්ධතියේ තත්පරයට ජිෆි ගණන තීරණය කළ යුතු අතර, ගත වූ කාලය ප්රයෝජනවත් ආකෘතියකින් ලබා ගැනීම සඳහා ගණිතය කරන්න.
HZ හි අගය සොයා ගැනීම හාස්යජනක ලෙස සංකීර්ණ බව පෙනේ (එනම් තත්පරයට ජිෆි). දී අදහස් දක්වා sysinfo.c
ඇති procps ඇසුරුම තුල, වෙනස් කර්නලය භාවිතා කරන්නේ නම් එක් A) කර්නල් ශීර්ෂ ගොනුව හා recompile ඇතුලත් කර ගත හැක, බී) POSIX භාවිතා sysconf()
අවාසනාවකට, C පුස්තකයන් සම්පාදනය දුෂ්කර-, ව්යංගාර්ථවත්ව අගය යොදා ගන්නා, කර්තව්යයක්, හෝ ඇ) කර්නලය අසන්න, නමුත් එය කිරීමට නිල අතුරු මුහුණතක් නොමැත. එබැවින්, ps
කේතයට නිවැරදි අගය තීරණය කරන ක්ලඩ්ජ් මාලාවක් ඇතුළත් වේ. වොව්.
එබැවින් එය ඔබට පහසු වන පහසුය ps
. :)
පරිශීලක @ 336_ සටහන් ලෙස, ලිනක්ස් හි (මෙය අතේ ගෙන යා නොහැකි), ඔබට 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()
ලබා දෙන අතර එම නිසා C පුස්තකාලයෙන් දෘඩ කේත කළ අගයක් ඔබට ලබා දෙයි.
අතේ ගෙන යා හැකි:
% ps -o stime,time $$
STIME TIME
Jan30 00:00:06
එනම් එම කවචය ජනවාරි 30 වන දින ආරම්භ කරන ලද අතර එය තත්පර 6 ක CPU වේලාවකි.
මෙම තොරතුරු ලබා ගැනීම සඳහා වඩාත් නිවැරදි හෝ වැඩි විග්රහ කළ හැකි නමුත් අඩු අතේ ගෙන යා හැකි ක්රම තිබිය හැකිය. ඔබගේ ps
විධානයේ හෝ proc
ගොනු පද්ධතියේ ප්රලේඛනය පරීක්ෂා කරන්න .
ලිනක්ස් යටතේ, මෙම තොරතුරු ජීවත් වේ /proc/$pid/stat
.
awk '{print "CPU time: " $14+$15; print "start time: " $22}' /proc/$$/stat
CPU කාලය ජිෆීස් වල ඇත; කවචයෙන් ජිෆී අගය සොයා ගන්නේ කෙසේදැයි මම නොදනිමි. ආරම්භක වේලාව ඇරඹුම් වේලාවට සාපේක්ෂව වේ (හමු වී ඇත /proc/uptime
).
sysinfo.c
මෙම procps පැකේජය, එක් අ) කර්නල් ශීර්ෂ ගොනුව (හා recompile වෙනස් කර්නලය භාවිතා කරන්නේ නම් ආ ඇතුලත් කර ගත හැක,) කනගාටුවට කරුණක් වන්නේ, සම්පාදනය දුෂ්කර-, ව්යංගාර්ථවත්ව අගය භාවිතා වන, POSIX sysconf () යන ශ්රිතය භාවිතා c පුස්තකාලය, හෝ ඇ) කර්නලය අසන්න, එය කිරීමට නිල අතුරු මුහුණතක් නොමැත. එබැවින්, කේතයට නිවැරදි අගය තීරණය කරන ක්ලඩ්ජ් මාලාවක් ඇතුළත් වේ. වොව්.
ps
බව manpage රාජ්යයන් time
"CPU කාලය සමුච්චිත" වේ. මම හිතන්නේ OP සොයන දේ etime
හෝ "ක්රියාවලිය ආරම්භ වූ දින සිට ගත වූ කාලය" යන්නයි. pubs.opengroup.org/onlinepubs/000095399/utilities/ps.html
etime
.
ps -eo pid,comm,cmd,start,etime | grep -i X
X යනු ක්රියාවලියේ නමයි
ps -o pid,comm,cmd,start,etime -p X
PID X දෙස බැලීමට.
ps
යම් යම් ප්රශ්න -o
ප්රතිදානය ආකෘතිය නියම කිරීමට විකල්පය, සහ ලබා ගත හැකි තීරු එක් etime
. මෑන් පිටුවට අනුව:
etime - ක්රියාවලිය ආරම්භ වූ දින සිට ගත වූ කාලය [[dd-] hh:] mm: ss.
සෑම ක්රියාවලියකම PID සහ ගත වූ කාලය ලබා ගැනීම සඳහා ඔබට මෙය ක්රියාත්මක කළ හැකිය:
$ ps -eo pid,etime
විශේෂිත PID එකක ගත වූ කාලය ඔබට අවශ්ය නම් (උදා: 12345), ඔබට මෙවැනි දෙයක් කළ හැකිය:
$ ps -eo pid,etime | awk '/^12345/ {print $2}'
( සංස්කරණය කරන්න : ඉහත විධානය සඳහා කෙටි වාක්ය ඛණ්ඩයක් ඇති බව පෙනේ; mattdm හි පිළිතුර බලන්න )
මෙය තවම යෝජනා නොකිරීමට හේතුව: ලිනක්ස් හි ඔබට stat()
ඔබේ PID සඳහා / proc / [nnn] නාමාවලිය කළ හැකිය.
මෙම හැසිරීම පැහැදිලිවම සැලසුම් කර ඇත්තේ ක්රියාවලියේ ආරම්භක වේලාව නැවත ලබා දීම සඳහා වන අතර එය ඉහළ විභේදනයකින් කළ හැකි අතර කර්නලයට (පැහැදිලිවම) සරලවම අදාළ තොරතුරු පරීක්ෂා කළ හැකි බැවින් ජිෆීස් හක්ක නොමැතිව කර්නලයට නිවැරදිව කළ හැකිය. ප්රවේශය, දත්ත වෙනස් කිරීම සහ තත්වය වෙනස් කිරීමේ ක්ෂේත්ර සියල්ලම ක්රියාවලිය ආරම්භක වේලාව ලබා දෙයි.
සියල්ලටම වඩා, ඔබට stat(1)
කවචයේ භාවිතා කළ හැකිය , නැතහොත් stat(2)
$ ප්රියතම_ප්රෝග්රැමිං_ලැන්ගුවේ සිට සුදුසු බන්ධනය භාවිතා කළ හැකිය , එබැවින් ඔබට බාහිර ක්රියාවලියක් දියත් කිරීමට පවා අවශ්ය නොවනු ඇත.
සටහන මෙම බව නොවේ සමග වැඩ /usr/compat/linux/proc
ඒ අතරින් කිහිපයකි මත; ආපසු පැමිණීම / වෙනස් කිරීම / තත්වය වෙනස් කිරීමේ වේලාවන් වර්තමාන කාලය වන අතර උපන් කාලය යුනික්ස් යුගය වේ. ඔබ මගෙන් ඇසුවොත් තරමක් මෝඩ සහයෝගයක් නැත.
stat /proc/4480
මෙය ඔබට ක්රියාවලියේ උපත, වෙනස් කිරීම, වෙනස් කිරීම සහ ප්රවේශ දිනයන් ලබා දෙනු ඇත. ඔබට ක්රියාවලි හැඳුනුම්පත අවශ්ය නම්, "ඉහළට" භාවිතා කරන්න
ඔබට වේලාව ධාවනය කර විධානයක් ක්රියාත්මක කළ හැකි නම් ඔබ සොයන දේ හරියටම ලැබෙනු ඇත. දැනටමත් ක්රියාත්මක වන විධානයකට එරෙහිව ඔබට මෙය කළ නොහැක.
[0]% නින්ද 20
නින්ද 20 0.00s පරිශීලක 0.00s පද්ධතිය 0% cpu 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 යනු ක්රියාවලි හැඳුනුම්පතයි.
stat
නිෂ්පාදිත සංඛ්යාලේඛන ගොනුව දෙස බැලීමෙන් ඔබට එය ක්රියාවලියේ ආරම්භක වේලාව ලබා ගත හැකිය proc
, එය භාවිතා කර ආකෘතිකරණය කර date
වර්තමාන කාලයෙන් අඩු කරන්න:
echo $(( $(date +%s) - $(date -d "$(stat /proc/13494/stat | grep Modify | sed 's/Modify: //')" +%s) ))
13494
ඔබේ ක්රියාවලිය කොහෙද ?
තත්පර කිහිපයකින් ගත වූ කාලය: expr $(date +"%s") - $(stat -c%X /proc/<PID HERE>)
date +%s --date="now - $( stat -c%X /proc/$$
etime=
මුද්රණ දෝෂයක්? මට සොයාගත හැක්කේetime
මිනිසාගේ පිටුවල පමණි.