取得行程起始時間

更新於 2024/11/14閱讀時間約 3 分鐘
在 Linux 系統中,設定 crontab 可以讓程式在某個時間點重跑。但要怎麼確定它真的在設定的時間重跑呢?
二個方法,我們先看困難的,再再看怎麼快速取得。

困難的方法:從系統資訊裡找答案

/proc/[行程代碼]/stat 裡,有一些行程的相關資料。查一下 stat 的欄位文件,第 22 欄 starttime 就是程式執行的時間點。但是
  1. 它要除以時鐘周期 (clock ticks) sysconf(_SC_CLK_TCK) 的數值。
  2. 它的單位是 jiffies,不是 timestamp。也就是它是算自作業系統跑起來後,第幾個時鐘周期開始跑這支程式,這樣是很精確的時間點,但這表示我們要多花些工夫來轉換成現實時間。
所以我們要先查下系統的 _SC_CLK_TCK 是多少,在終端機中用 getconf 指令就可以確定。
getconf CLK_TCK
查出來數值是 100。用 cat /proc/[行程代碼]/stat 然後算一算第 22 欄的數字再除 100 也可以,但我們可以用較好的方式,例如用 awk 來剖析就不用拿筆對準螢幕一個個算到 22 欄。
awk '{print int($22 / 100)}' /proc/[行程代碼]/stat
該行的意思,是將 /proc/[行程代碼]/stat 的第 22 欄除 100 取整數。於是可以取得 starttime 的數據了,結果時間單位是秒。
接著,我們要確定作業系統跑了多久。這看 /proc/uptime 第一欄就行,單位是秒。
awk '{print int($1)}' /proc/uptime
就是無聊,不想再用 awk 指令,那用 cut 來切吧。要注意的是要取整數,於是用小數點當成分割標記。
cat /proc/uptime | cut -d '.' -f 1
然後要計算,公式如下:
現在時間 - (開機時間 - 程式執行時間)
現在時間的 timestamp 可以用 date 指令取得
date +%s
之後將上面的三個數字加加減減,就可以取得執行時的 timestamp,再用 date 將它轉成可讀時間
date -d timestamp
我們將這些寫成 shell script
用這方式就可以取得程式執行時間
./pidstarttime.sh 5566

簡單的方法:用指令取得答案

終端機用 ps 指令,加上 lstart 參數,就可以直接取得資料,不用管它是什麼 jiffies 除時脈變成秒。
ps -o lstart= -p [行程代碼]
補充:macOS 因為它沒有 /proc 的機制,所以只能用這個 ps 指令來做,這指令參數跟 Linux 完全相同。
參考資料
為什麼會看到廣告
avatar-img
2會員
26內容數
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
WILSON PENG的沙龍 的其他內容
寫程式時,遇到要將數字變數的正負值顛倒過來 (例如 55 變成 -55、-66 變成 66),這時該怎麼做?
用 PHP 程式來修正 RSS 裡的語法解析錯誤。 一些新聞訊息之類的網站提供 RSS (Resource description framework Site Summary, 簡易資訊聚合),以 XML (Extensible Markup Language, 可延伸標記式語言) 語法的格式
PHP 在 Cloudflare 後的抓 Public IP,Cloudflare 提供了 HTTP_CF_CONNECTING_IP 的 HTTP Header,所以程式用它就可以取到用戶的 IP。
UNIX 在設計時,用 32 位元為基礎設計,Timestamp (time_t 結構) 順理成章也是 32 位元 (signed int32),從 1970 年開始算,導致它能記錄的時間在 2038 年會溢位變負數。
有一種狀況,URL GET method 有設變數,卻是空值 http://foo.bar.xxx/idol.php?IdolGroup= 這時,變數就算初始化也還是 null, 不會變成預設值
程式如下: 跑了五次,每次判斷一千萬回 f1() 陣列的方式: 5.2219750881195 5.194901943
寫程式時,遇到要將數字變數的正負值顛倒過來 (例如 55 變成 -55、-66 變成 66),這時該怎麼做?
用 PHP 程式來修正 RSS 裡的語法解析錯誤。 一些新聞訊息之類的網站提供 RSS (Resource description framework Site Summary, 簡易資訊聚合),以 XML (Extensible Markup Language, 可延伸標記式語言) 語法的格式
PHP 在 Cloudflare 後的抓 Public IP,Cloudflare 提供了 HTTP_CF_CONNECTING_IP 的 HTTP Header,所以程式用它就可以取到用戶的 IP。
UNIX 在設計時,用 32 位元為基礎設計,Timestamp (time_t 結構) 順理成章也是 32 位元 (signed int32),從 1970 年開始算,導致它能記錄的時間在 2038 年會溢位變負數。
有一種狀況,URL GET method 有設變數,卻是空值 http://foo.bar.xxx/idol.php?IdolGroup= 這時,變數就算初始化也還是 null, 不會變成預設值
程式如下: 跑了五次,每次判斷一千萬回 f1() 陣列的方式: 5.2219750881195 5.194901943
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
如果你想知道投資比特幣的最短路徑,或是想知道投資比特幣的風險以及一路上需要具備的知識,那也許這篇文章能幫助你快速地走過從 0 到 1 的過程……
Thumbnail
  魔霧森林的一處位置,爆破與刀擊的聲響連綿不絕。殷貴九尾顯現,用上最大上限數量的爆破靈符,極力抗衡獨臂刀者的猛攻。
透過C#取得臺灣證券交易所與證券櫃檯買賣中心OpenAPI公司治理與財務報表等資料進行分析。
Thumbnail
力曼RIMAN自2023年底登台以來,從韓國的微商模式轉型為直銷,並憑藉全智賢、元斌、李英愛、金泰希等大咖代言人的星光效應,迅速在台灣市場掀起熱潮。這背後,究竟是什麼樣的魅力讓人們如此關注?他們的產品又有哪些獨到之處? 力曼RIMAN的產品線目前涵蓋三大領域:護膚品牌INCELLDERM、保養品牌
Thumbnail
Sunny 在2024年5月4日(星期六),參加並且通過和拿到風險管理的金融證照囉🎉🎉🎉 這次,Sunny 準備期間,發現這張證照網路上的心得少,多數是時間比較久以前的分享,因此,心想若有通過,一定要分享自己的準備心得,給想要準備這張證照的讀者們參考~ 以下,Sunny分別分享風險管理
Thumbnail
一個團隊要決定一個策略、擬定一個方針、甚至決定一件事情時,除非遇到強勢作風的領導者,否則常常會遇到所謂【少數服從多數】的民主現象。
Thumbnail
上次我分享了以 Flagpole 的方式取得工作簽證、驚險的過程( )。其實我前一年首次拿到開收工簽的過程也十分耐人尋味,也是時候回顧紀錄一下。
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
如果你想知道投資比特幣的最短路徑,或是想知道投資比特幣的風險以及一路上需要具備的知識,那也許這篇文章能幫助你快速地走過從 0 到 1 的過程……
Thumbnail
  魔霧森林的一處位置,爆破與刀擊的聲響連綿不絕。殷貴九尾顯現,用上最大上限數量的爆破靈符,極力抗衡獨臂刀者的猛攻。
透過C#取得臺灣證券交易所與證券櫃檯買賣中心OpenAPI公司治理與財務報表等資料進行分析。
Thumbnail
力曼RIMAN自2023年底登台以來,從韓國的微商模式轉型為直銷,並憑藉全智賢、元斌、李英愛、金泰希等大咖代言人的星光效應,迅速在台灣市場掀起熱潮。這背後,究竟是什麼樣的魅力讓人們如此關注?他們的產品又有哪些獨到之處? 力曼RIMAN的產品線目前涵蓋三大領域:護膚品牌INCELLDERM、保養品牌
Thumbnail
Sunny 在2024年5月4日(星期六),參加並且通過和拿到風險管理的金融證照囉🎉🎉🎉 這次,Sunny 準備期間,發現這張證照網路上的心得少,多數是時間比較久以前的分享,因此,心想若有通過,一定要分享自己的準備心得,給想要準備這張證照的讀者們參考~ 以下,Sunny分別分享風險管理
Thumbnail
一個團隊要決定一個策略、擬定一個方針、甚至決定一件事情時,除非遇到強勢作風的領導者,否則常常會遇到所謂【少數服從多數】的民主現象。
Thumbnail
上次我分享了以 Flagpole 的方式取得工作簽證、驚險的過程( )。其實我前一年首次拿到開收工簽的過程也十分耐人尋味,也是時候回顧紀錄一下。