取得行程起始時間

更新於 發佈於 閱讀時間約 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
大家好,我是woody,是一名料理創作者,非常努力地在嘗試將複雜的料理簡單化,讓大家也可以體驗到料理的樂趣而我也非常享受料理的過程,今天想跟大家聊聊,除了料理本身,料理創作背後的成本。
Thumbnail
哈囉~很久沒跟各位自我介紹一下了~ 大家好~我是爺恩 我是一名圖文插畫家,有追蹤我一段時間的應該有發現爺恩這個品牌經營了好像.....快五年了(汗)時間過得真快!隨著時間過去,創作這件事好像變得更忙碌了,也很開心跟很多厲害的創作者以及廠商互相合作幫忙,還有最重要的是大家的支持與陪伴🥹。  
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
本文將介紹一些常用的 Linux 指令,幫助新手快速上手。主要內容包括文件和目錄管理(如 ls、cd、mkdir)、檔案操作(如 cp、mv、rm)。通過這些指令的學習,使用者可以更快速地操作 Linux 系統。
Thumbnail
對於新手來說,使用Fedora可能會有一些困難,比如找不到要延遲系統暫停時間如下圖,那要如何做呢?請繼續看下去。
Thumbnail
(1)事前LINE主動發出通知,無論何處,所有人均可掌握值勤排班內容  (2) 換班前幾天收到通知,可事先安排交代事務給下回值勤人員,讓值勤業務能順利實施
Thumbnail
放鬆的週末,我與幾位同事決定提升我們的後端開發技巧,選擇了「日期範圍生成器」作為我們的小型實作。作為團隊中較有經驗的PHP工程師,我引領著團隊從基礎程式碼的撰寫開始,進而深入到物件導向的結構調整,最後提高程式可擴充性的挑戰。雖然過程中遇到不少困難,但我們通過不斷的討論和優化,最終成功克服了所有挑戰。
Thumbnail
程式與頻率時間 看起來這個問題有些奇怪,程式與頻率時間有什麼關係呢?一旦程式完成,似乎就不需要再理會頻率和時間了。實際上,這可能是一些不熟悉程式設計的人所提出的疑問。了解程式設計最重要的一點是,頻率和時間的安排會直接影響程式的效能和展現速度。 時間的利用 舉例來說,假設一個表單的每筆處理時間為
Thumbnail
用 Powershell 的 IDE ,寫一個在剪貼簿裡存 Timestamp 的無聊小程式。
Markdown 格式的進度紀錄表,可直接複製到任何支援 Markdown 格式的程式或網站中使用。
Thumbnail
大家好,我是woody,是一名料理創作者,非常努力地在嘗試將複雜的料理簡單化,讓大家也可以體驗到料理的樂趣而我也非常享受料理的過程,今天想跟大家聊聊,除了料理本身,料理創作背後的成本。
Thumbnail
哈囉~很久沒跟各位自我介紹一下了~ 大家好~我是爺恩 我是一名圖文插畫家,有追蹤我一段時間的應該有發現爺恩這個品牌經營了好像.....快五年了(汗)時間過得真快!隨著時間過去,創作這件事好像變得更忙碌了,也很開心跟很多厲害的創作者以及廠商互相合作幫忙,還有最重要的是大家的支持與陪伴🥹。  
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
本文將介紹一些常用的 Linux 指令,幫助新手快速上手。主要內容包括文件和目錄管理(如 ls、cd、mkdir)、檔案操作(如 cp、mv、rm)。通過這些指令的學習,使用者可以更快速地操作 Linux 系統。
Thumbnail
對於新手來說,使用Fedora可能會有一些困難,比如找不到要延遲系統暫停時間如下圖,那要如何做呢?請繼續看下去。
Thumbnail
(1)事前LINE主動發出通知,無論何處,所有人均可掌握值勤排班內容  (2) 換班前幾天收到通知,可事先安排交代事務給下回值勤人員,讓值勤業務能順利實施
Thumbnail
放鬆的週末,我與幾位同事決定提升我們的後端開發技巧,選擇了「日期範圍生成器」作為我們的小型實作。作為團隊中較有經驗的PHP工程師,我引領著團隊從基礎程式碼的撰寫開始,進而深入到物件導向的結構調整,最後提高程式可擴充性的挑戰。雖然過程中遇到不少困難,但我們通過不斷的討論和優化,最終成功克服了所有挑戰。
Thumbnail
程式與頻率時間 看起來這個問題有些奇怪,程式與頻率時間有什麼關係呢?一旦程式完成,似乎就不需要再理會頻率和時間了。實際上,這可能是一些不熟悉程式設計的人所提出的疑問。了解程式設計最重要的一點是,頻率和時間的安排會直接影響程式的效能和展現速度。 時間的利用 舉例來說,假設一個表單的每筆處理時間為
Thumbnail
用 Powershell 的 IDE ,寫一個在剪貼簿裡存 Timestamp 的無聊小程式。
Markdown 格式的進度紀錄表,可直接複製到任何支援 Markdown 格式的程式或網站中使用。