linux - Passing IPC(Instructions/Cycles) continuously to other function or variable -


i trying read performance counters , ipc. need use ipc control few machine specific parameters. using shell script same. please see code below:

while true      retval=./perf periodic -e instructions -e cycles -s 50 -d -m td &     some_pid=$!     kill some_pid     if ["$retval" -gt "0.5"]                      ***something***     fi     sleep 1 done 

i getting following error:

algorithm.sh[27]: kill: some_pid: arguments must jobs or process ids algorithm.sh[27]: periodic: not found algorithm.sh[27]: [: missing ] algorithm.sh[27]: kill: some_pid: arguments must jobs or process ids algorithm.sh[27]: [: missing ] algorithm.sh[27]: periodic: not found algorithm.sh[27]: kill: some_pid: arguments must jobs or process ids algorithm.sh[27]: [: missing ] 

can give me pointers on how get/return value perf instruction. tried using function , returning value, failed.

---------updated----------

now running following, , 1 of problem got solved , 1 remaining.

./perf periodic -e instructions -e cycles -s 50 -d -m td > result.txt &  

and other 1

while true      retval=$(tail -n 1 result.txt)     echo $retval     if ["$retval" -gt "0.5"]                      echo "hello mate"     fi     sleep 1 done 

the echo giving value, if statement not getting executed. giving following:

algorithm.sh[30]: [: missing ] 0.302430 algorithm.sh[30]: [0.302430: not found 0.472716 algorithm.sh[30]: [0.472716: not found 0.475687 algorithm.sh[30]: [0.475687: not found 

i looked if condition syntax , couldn't spot mistake. please help.

couple of shell syntax issues here.

first, retval=... going set retval variable equal first part of string on right side of '='. ampersand background whole thing, throwing value away. meant do:

retval=`./perf periodic -e instructions -e cycles -s 50 -d -m td` 

which store output of perf command retval. however, won't work if put background '&'. you'll need either (a) run synchronously without '&' i've shown above, (b) redirect output file , recover after it's finished (you'll need use wait determine when that's happened), or (c) use "coprocess" (too complicated explain here: see bash man page).

also, meant kill $some_pid? without '$', string "some_pid" passed literal argument kill, not intended.

edit

following revisions... shell operates splitting command line individual tokens. spaces important. in case, initial token being identified shell combined value of ["$retval" (after variable substitution , quote removal). last token 0.5] after removal of quotes. in first invocation line then, first token '[' (presumably retval empty first time through). there it's complaining last token not being matching ']'. in other iterations, first token '[' plus additional numeric text $retval not providing valid command name.

once fix that, you'll discover -gt operator evaluates integer comparisons. use bc(1) command. example, command produce output of 1 if $retval greater 0.5; otherwise 0.

echo "$retval > 0.5" | bc 

but note you'll need ensure retval has valid numeric expression or you'll cause syntax error in bc. need capture output , put conditional. should work:

if [ "$retval" ]     x=$(echo "$retval > 0.5" | bc)     if [ $x -eq 1 ]             echo "hello mate"     fi fi 

(note $(...) don't need additional spaces next parentheses. , in assignment statement x=foo, must not have space on either side of =.)


Comments

Popular posts from this blog

python - TypeError: start must be a integer -

c# - DevExpress RepositoryItemComboBox BackColor property ignored -

django - Creating multiple model instances in DRF3 -