Я создаю свой собственный андроид rom. Для создания его я должен работать
mka -j8 bacon
Однако я хотел измерить время, которое потребовалось для создания его, таким образом, я использовал
/usr/bin/time -f "User\t%U\nSys\t%S\nReal\t%E\nCPU\t%P" mka -j8 bacon
Это не будет работать, потому что это говорит
/usr/bin/time: cannot run mka: No such file or directory
Любая справка, как работать вокруг этого, это ценится! Я выполняю xubuntu.
Править:
По некоторым причинам, использование делают вместо mka, действительно работает, однако использование mka лучше.
/usr/bin/time -f "User\t%U\nSys\t%S\nReal\t%E\nCPU\t%P" make -j8 bacon
Редактирование 2: с cyanogenmod веб-сайта
Вызов
$ source build/envsetup.sh
или$ . build/envsetup.sh
от Вашей оболочки запускает envsetup.sh скрипт в каталоге сборки. envsetup.sh добавляет много функций к среде сборки, самая важная из которых упоминаются ниже.
source build/evnsetup.sh
команда, которую я выполняю перед выполняющимся временем. Одна из тех добавленных функций evnsetup.sh mka
, действительно ли возможно назвать это из time
команда?
Редактирование 3: Вывод типа mka
$ type mka
mka is a function
mka ()
{
case `uname -s` in
Darwin)
make -j `sysctl hw.ncpu|cut -d" " -f2` "$@"
;;
*)
schedtool -B -n 1 -e ionice -n 1 make -j$(cat /proc/cpuinfo | grep "^processor" | wc -l) "$@"
;;
esac
}
Проблема - это mka
функция удара, экспортируемая Вашим сценарием и не исполняемым файлом (в противоположность make
), таким образом, /usr/bin/time
не находит его, поскольку это ищет исполняемый файл.
Существует два возможных решения.
Во-первых, обратите внимание, что существует различие между встроенной функцией удара time
, и исполняемый файл /usr/bin/time
. Это различные команды, которые берут различные параметры и генерируют другой вывод:
$ time sleep 1
real 0m1.001s
user 0m0.000s
sys 0m0.001s
$ /usr/bin/time sleep 1
0.00user 0.00system 0:01.00elapsed 0%CPU (0avgtext+0avgdata 664maxresident)k
0inputs+0outputs (0major+215minor)pagefaults 0swaps
Ввести help time
получить справку для встроенного удара time
. Ввести man time
получить справку для исполняемого файла /usr/bin/time
.
Первое использование решения time
, тогда как второе решение использует /usr/bin/time
.
Первое решение: использование встроенной функции удара time
Встроенная функция удара time
знает о заявленных функциях удара, и можно сразу использовать его для измерения времени таких функций.
$ foo() {
sleep 1;
echo "Hello World"
}
$ time foo
Hello World
real 0m1.002s
user 0m0.000s
sys 0m0.001s
В Вашем случае должна работать следующая команда:
$ time mka -j8 bacon
Это было бы моим предпочтительным путем. Однако это не может генерировать точно вывод, который Вы хотите. В частности, это не измеряет или печатает использование ЦП.
Второе решение: использование исполняемого файла /usr/bin/time
Вы не можете непосредственно измерить время встроенного использования функции удара /usr/bin/time
(насколько я знаю), но что можно сделать, измерить время /bin/bash
исполняемый файл, выполняющий ту функцию удара. Это - немного hacky, и он генерирует немного служебное, поскольку Вы запускаете дополнительный экземпляр bash
. Но эти издержки могут быть незначительными, когда сталкивающийся с функцией, которая занимает минуты для вычислений, таким образом, они могут все еще удовлетворить потребностям лучше.
Смочь запуститься /bin/bash
исполняемый файл на функции удара, мы должны экспортировать функцию сначала.
$ foo() {
sleep 1;
echo "Hello World"
}
$ export -f foo
$ echo foo | /usr/bin/time /bin/bash
Hello World
0.00user 0.00system 0:01.00elapsed 0%CPU (0avgtext+0avgdata 1476maxresident)k
0inputs+0outputs (0major+707minor)pagefaults 0swaps
Следовательно, в Вашем случае, чтобы смочь использовать /usr/bin/time
и генерируйте выходной формат, который Вы хотите, Вы могли продолжить двигаться следующим образом:
$ export -f mka
$ echo 'mka -j8 bacon' | /usr/bin/time -f "User\t%U\nSys\t%S\nReal\t%E\nCPU\t%P" /bin/bash