2013-10-23 4 views
4

내 컴퓨터에서 실행되는 matlab 작업을위한 간단한 메모리 프로파일 러를 사용하려고합니다. 1 개 또는 0 개의 matlab 작업 인스턴스가 있지만 해당 프로세스 ID는 자주 변경됩니다 (실제로 다른 스크립트에서 호출되기 때문에). 그래서 여기따옴표 붙은 bash 스크립트를 실행하는 방법.

내가 메모리 사용량을 기록하기 위해 함께 넣어 bash는 스크립트입니다

#!/bin/bash 
pid=`ps aux | grep '[M]ATLAB' | awk '{print $2}'` 
if [[ -n $pid ]] 
then 
    \grep VmSize /proc/$pid/status 
else 
    echo "no pid" 
fi 

이 같은 떠들썩한 파티에서이 스크립트를 실행하면 잘 작동

./script.sh 

, 나을주는 다음 결과 :

VmSize: 1289004 kB 

정확히 내가 원하는 것입니다.

이제 주기적으로 실행하고 싶습니다.

watch ./script.sh 

그러나이 경우 난 단지가 나타납니다 : 그래서 다음과 같이 watch으로 실행

no pid 

와 나는 그것을 볼 수 있기 때문에 내가 matlab에 작업이 아직 실행 알고 있습니다 top에 동일한 PID, 그리고 게다가, 나는 각 matlab 작업을 완료하는 데 몇 시간 걸릴 알아요.

나는 pid를 설정할 때 내가 가진 따옴표가 잘못되었다고 확신한다. 나는 그것을 고치는 방법을 알아낼 수 없다. 내가 뭘 잘못하고 있는지 누구나 아는 사람?

추신. 설명서 페이지가 watch 인 경우 명령은 sh -c으로 실행됩니다. sh -c ./script과 같은 스크립트를 실행했지만 정상적으로 작동하지만 watch은 작동하지 않습니다.

+1

+1에 대한 정답이 있습니다 (형식이 너무 비슷합니다.). 가장 가능성있는 설명은 '시계'가 그것을 확인하기로 결정할 때 matlab이 실행되지 않고 있다는 것입니다. 나는'ps aux | grep '[M] ATLAB''을'pid = ...'위의 줄에 써서 스크립트가 찾고 있는지를 확인하십시오. '남자 시계 '를 보았습니까? 당신의 노력처럼 검색을 동기화하는 것에 대한 단서가 있습니까? 행운을 빕니다! – shellter

+0

감사합니다. @shellter. 나는이 질문에 언급 했어야 : MATLAB 실제로 전체 시간을 실행합니다. 나는 항상 같은 pid로'top'에서 볼 수 있습니다. 나는 또한 직장에서 matlab은 몇 시간이 걸린다는 것을 알고 있으며 watch를 실행하는 동안 종료되지는 않을 것이다. 이를 반영하기 위해 질문을 업데이트 할 것입니다. – farmir

+0

방금 ​​스크립트를 테스트했습니다. 하지만 그것은 내 컴퓨터에서 잘 작동합니다! –

답변

1

C -

는 스크립트 Ctrl 키를 종료하려면 cron 작업을 실행하고 스크립트 로그를 다음과 같은 파일로 만드십시오.

#!/bin/bash 
pid=$(pidof MATLAB) # Just to follow previously given advice :) 
if [[ -n $pid ]] 
then 
    echo "$(date): $(\grep VmSize /proc/$pid/status)" >> logfile 
else 
    echo "$(date): no pid" >> logfile 
fi 

물론 터치로 로그 파일을 만들어야합니다.

+0

고마워. 귀하의 제안이 효과가 있습니다. 스크립트를 찾으려면'pidof -x'를 사용해야합니다. 또는 대신'pgrep'을 사용하십시오. 시계가 왜 내 grep MATLAB에서 작동하지 않는지 알 수는 있지만 처음에는 MATLAB에서 :) 누군가가 그 것에 대한 설명을 갖고 있는지 보거나 조금 더 기다릴 것입니다. . 그렇지 않으면 네가 받아 들일거야. – farmir

3

대신 sleep 명령과 함께 루프를 사용하지 않으시겠습니까? 예를 들어

:

#!/bin/bash 
pid=`ps aux | grep '[M]ATLAB' | awk '{print $2}'` 

while [ "1" ] 
do 
if [[ -n $pid ]] 
then 
    \grep VmSize /proc/$pid/status 
else 
    echo "no pid" 
fi 
sleep 10 
done 

여기서 스크립트가 10 초 (대기) 잔다. sleep 명령을 변경해야하는 간격을 설정할 수 있습니다. 예를 들어 한 시간 동안 스크립트를 잠자기로 설정하려면 sleep 1h을 사용하십시오. 나는 그것이 시계 작동하지 왜 아무 생각이

pid=$(pidof MATLAB) 
+0

감사. 이 작동합니다. 그러나 조금 더 간단했던 것에 따라 나는 단지 Jotne 제안을 사용하는 것을 끝내었다 :) – farmir

1

하지만 당신은 사용할 수 있습니다 :이

pid=`ps aux | grep '[M]ATLAB' | awk '{print $2}'` 

가 변경 될 수 있습니다

+0

정말 내 질문에 관련되지 않습니다 : 나는이 스크립트 밖에서 로깅을하지만 레코드에 대해서만, 나는 생각한다. (그리고 내 컴퓨터에서 테스트/확인했다.) 로그 파일을 먼저 만질 필요는 없다. 존재하지 않으면 자동으로 생성됩니다. – farmir

0

시계에서 ps 명령을 실행 해보십시오. 나는 너무 오래 걸릴 때 줄 바꿈 등으로 과거에는 문제가있었습니다.

명령을 실행하는 터미널을 더 넓게 만들거나 다음과 같이 열을 변경하여 수정할 수 있습니다 (원하는대로 160을 조정해야 할 수도 있음). export COLUMNS = 160;

관련 문제