在同一个shell(bash)中运行脚本

我的问题是特定于SPECCPU2006(基准testing套件)的运行。 在安装基准testing程序之后,我可以在terminal中调用一个名为“specinvoke”的命令来运行特定的基准testing。 我有另一个脚本,其中部分代码如下所示:

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

我的目标是获取正在运行的任务的PID。 但是,通过做上面所示,我得到的是“specinvoke”shell命令的PID,真正的运行任务将有另一个PID。

但是,通过运行specinvoke -n ,运行在specinvoke shell中的真实代码将被输出到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 

它内部运行一个二进制代码。代码将不同于基准到基准(通过在不同的基准目录下调用)。 而且因为“specinvoke”被安装,而不仅仅是一个脚本,我不能使用“ source specinvoke ”。

那么有什么线索吗? 有什么办法可以直接在同一个shell中调用shell命令(具有相同的PID),或者我应该转储specinvoke -n并运行转储的材料?

你仍然可以做这样的事情:

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

如果有多个milc_base.gcc43-64bit binary调用,你仍然可以使用

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

根据手册页:

-n

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