2013-07-06 4 views
2

내 문제는 SPECCPU2006 (벤치 마크 슈트)의 실행과 관련이 있습니다. 벤치 마크를 설치 한 후 터미널에서 "specinvoke"라는 명령을 호출하여 특정 벤치 마크를 실행할 수 있습니다. 코드의 일부가 다음과 같은 다른 스크립트가 있습니다.동일한 쉘 (bash)에서 스크립트 실행

cd (specific benchmark directory) 
specinvoke & 
pid=$! 

내 목표는 실행중인 작업의 PID를 얻는 것입니다. 그러나 위의 내용을 수행하면 "specinvoke"쉘 명령의 PID가 표시되고 실제 실행중인 태스크는 다른 PID를 갖게됩니다.

그러나 specinvoke -n을 실행하면 specinvoke 셸에서 실행중인 실제 코드가 stdout으로 출력됩니다. 예를 들어, 하나 개의 벤치 마크,이 같은 : 그것은 내부

# specinvoke r6392 
# Invoked as: specinvoke -n 
# timer ticks over every 1000 ns 
# Use another -n on the command line to see chdir commands and env dump 
# Starting run for copy #0 
../run_base_ref_gcc43-64bit.0000/milc_base.gcc43-64bit <su3imp.in> su3imp.out 2>> su3imp.err 

binary.The 코드가 벤치 마크 벤치 마크에서 다를 수 있습니다 실행중인 (다른 벤치 마크 디렉토리에 호출하여). 그리고 "specinvoke"가 설치되어 있고 스크립트가 아니기 때문에 "source specinvoke"을 사용할 수 없습니다.

실마리가 있습니까? 동일한 쉘 (동일한 PID를 가짐)에서 쉘 명령을 직접 호출 할 수있는 방법이 있습니까, 아니면 specinvoke -n을 덤프하고 덤프 된 자료를 실행해야합니까?

답변

1
당신은 여전히 ​​같은 것을 할 수

다음 milc_base.gcc43-64bit binary 여러 호출이있는 경우

cd (specific benchmark directory) 
specinvoke & 
pid=$(pgrep milc_base.gcc43-64bit) 

을, 당신은 여전히 ​​사용할 수있는 매뉴얼 페이지를 따라

pid=$(pgrep -n milc_base.gcc43-64bit) 

:

-n

Select only the newest (most recently started) of the matching 
processes 
+0

답장을 보내 주셔서 감사합니다. 그러나 이것은 아마도 잘 작동하지 않을 것입니다. 이미 같은 이름의 다른 프로세스를 시작했을 수도 있기 때문입니다. milc_base.gcc43-64bit ... 내 말이 무슨 뜻인지 아시죠? 마지막 specinvoke 쉘 스크립트에 의해 호출 된 프로세스의 PID를 직접 얻을 수있는 방법이 있습니까? –