내 프로그램이 사용된 기간을 알고 싶습니다. 예를 들어, 웹 브라우저를 사용하는 경우 총 사용 시간을 확인하기 위해 시작 시간과 종료 시간을 알고 싶습니다.
기본적으로 저는 애플리케이션이 언제 시작되고 언제 종료되는지 알고 싶고, 이벤트를 기반으로 파일에 시간을 등록하는 것과 같은 작업을 수행하고 싶습니다.
커널 이벤트 또는 유사한 이벤트를 듣는 방법을 검색했지만 아무것도 찾지 못했습니다. 나도 시도해 보았 supervisord
으나 프로세스가 너무 빨리 종료되어 아무것도 기록되지 않는다고 했습니다.
pyinotify
나의 다른 시도는 라이브러리를 사용하여 /proc
폴더를 보는 것이었지만 완전히 실패했습니다.
저는 우분투에서 일하고 있습니다. 어떤 팁이 있나요?
이것들은 내 출처입니다
답변1
BSD 프로세스 회계를 사용할 수 있습니다. lastcomm
경과 시간은 보고되지 않지만 적어도 Linux에서는 계정 데이터베이스에 저장되며 명령을 사용하여 쿼리할 수 있습니다 dump-acct
.
$ sudo accton on # activate process accounting
$ sleep 5.23
$ sudo dump-acct /var/log/account/pacct | grep '^sleep'
sleep |v3| 0.00| 0.00| 523.00| 10031| 10031| 14632.00| 0.00| 15261 416|Mon Jun 2 17:09:37 2014
경과 시간은 필드 5(523센티초 이상)입니다.
세 번째와 네 번째 필드는 사용자 시간과 시스템 시간으로, 프로세스(프로세스의 모든 스레드)를 실행하는 CPU(모든 CPU)에서 소비한 시간입니다.
(적어도 Linux에서는) 프로세스(해당 스레드 중 하나)가 종료되면 종료 당시의 프로세스 이름이 기록됩니다. 이는 예를 들어 다음을 의미합니다.
sh -c 'sleep 4; exec sleep 5'
한 프로세스가 실행되고 sh
, 다른 프로세스가 실행되도록 분기된 sleep 4
다음, 첫 번째 프로세스가 실행됩니다 sleep 5
(따라서 이름이 변경됨). 회계 데이터베이스에서 우리는 다음을 얻습니다.
sleep |v3| 0.00| 0.00| 400.00| 1000| 1000| 10320.00| 0.00| 28867 28866|Tue Jun 3 07:45:52 2014
sleep |v3| 0.00| 0.00| 900.00| 1000| 1000| 10320.00| 0.00| 28866 28801|Tue Jun 3 07:45:52 2014
이는 실행되는 프로세스이며 sh
지속 시간은 900센티초로 sleep 5
계산되며 sleep
언급되지 않습니다 sh
.
firefox
불행하게도 ( 다중 스레드 응용 프로그램) 제 경우에는 프로세스의 단기 스레드 중 하나가 종료될 때 계산되었기 때문에 내가 본 시간이 매우 짧았습니다.