Time

找出一個程序自己花費了多少時間

  • June 23, 2017

time命令可用於獲取給定作業的 CPU 時間估計值。但是,它的輸出似乎包括在子程序中花費的時間。有沒有辦法只獲得在父程序中花費的時間。

getrusage(2)提供RUSAGE_SELFRUSAGE_CHILDREN;呼叫 shell 只能使用RUSAGE_CHILDREN包含您的程序以及該程序的子程序。因此,正如 Stéphane Chazelas 指出的那樣,您的流程需要getrusage(RUSAGE_SELF, &usage) 從自身內部呼叫,如果您的流程無法被編輯來做到這一點,則必須通過一些LD_PRELOAD技巧來實現。

另一種選擇是使用 DTrace 或此處的 SystemTap 類型核心分析工具來報告程序退出時的使用情況;以下報告所有程序退出值:

probe kprocess.exit {
   printf("%s[%d]: %s\n  %s\n  %s\n\n",
     execname(), pid(), cmdline_str(),
     task_time_string(),
     proc_mem_string()
   );
}

我們還可以使用適當的程式碼分析特定的 PID 或可執行名稱,這裡再次使用 SystemTap:

probe kprocess.exit {
   if (pid() != target()) next;
   printf("%s[%d]: %s\n", execname(), pid(), task_time_string());
}

雖然這可能需要額外的測試來確認當一個程序被信號殺死時會發生什麼,等等。

引用自:https://unix.stackexchange.com/questions/373026