Saya sedang membangun rom android saya sendiri. Untuk membangunnya, saya harus berlari
mka -j8 bacon
Namun, saya ingin mengukur waktu yang dibutuhkan untuk membangunnya, jadi saya gunakan
/usr/bin/time -f "User\t%U\nSys\t%S\nReal\t%E\nCPU\t%P" mka -j8 bacon
Ini tidak akan berjalan, karena katanya
/usr/bin/time: cannot run mka: No such file or directory
Setiap bantuan bagaimana mengatasi ini, sangat dihargai! Saya menjalankan xubuntu.
Edit:
Untuk beberapa alasan, menggunakan make bukan mka berfungsi, namun menggunakan mka lebih baik.
/usr/bin/time -f "User\t%U\nSys\t%S\nReal\t%E\nCPU\t%P" make -j8 bacon
Sunting 2: dari situs web cyanogenmod
Meminta
$ source build/envsetup.sh
atau$ . build/envsetup.sh
dari shell Anda menjalankan skrip envsetup.sh di direktori build. envsetup.sh menambahkan banyak fungsi ke lingkungan build, yang paling penting terdaftar di bawah ini.
source build/evnsetup.sh
adalah perintah yang saya jalankan sebelum mengeksekusi waktu. Salah satu fungsi yang ditambahkan oleh evnsetup.sh adalah mka
, apakah mungkin untuk memanggil ini dari dalam time
perintah?
Sunting 3: Output dari jenis 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
}
sumber
source build/evnsetup.sh
, pada titik di mana Anda ingin menelepontime mka -j8 bacon
, dapatkah Anda memposting output dari perintahtype mka
?Jawaban:
Masalahnya adalah itu
mka
adalah fungsi bash yang diekspor oleh skrip Anda dan bukan yang dapat dieksekusi (berlawanan denganmake
), jadi/usr/bin/time
tidak menemukannya, karena ia mencari yang dapat dieksekusi.Ada dua solusi yang mungkin.
Pertama, perhatikan bahwa ada perbedaan antara fungsi built-in bash
time
, dan yang dapat dieksekusi/usr/bin/time
. Ini adalah perintah yang berbeda, yang mengambil parameter berbeda dan menghasilkan output yang berbeda:Ketik
help time
untuk mendapatkan bantuan untuk bash bawaantime
. Ketikman time
untuk mendapatkan bantuan bagi yang dapat dieksekusi/usr/bin/time
.Solusi pertama menggunakan
time
, sedangkan solusi kedua menggunakan/usr/bin/time
.Solusi pertama: menggunakan fungsi built-in bash
time
Fungsi bawaan bash
time
mengetahui fungsi bash yang dideklarasikan, dan Anda dapat segera menggunakannya untuk mengukur waktu fungsi tersebut.Dalam kasus Anda, perintah berikut harus berfungsi:
Ini akan menjadi cara yang saya sukai. Namun, itu mungkin tidak menghasilkan output yang Anda inginkan. Secara khusus, itu tidak mengukur atau mencetak penggunaan CPU.
Solusi kedua: menggunakan executable
/usr/bin/time
Anda tidak dapat secara langsung mengukur waktu menggunakan fungsi bash bawaan
/usr/bin/time
(sejauh yang saya tahu), tetapi yang dapat Anda lakukan adalah mengukur waktu/bin/bash
eksekusi yang dapat dijalankan dengan menjalankan fungsi bash tersebut. Ini sedikit hacky, dan menghasilkan sedikit overhead saat Anda meluncurkan contoh tambahanbash
. Tetapi overhead ini dapat diabaikan ketika dihadapkan dengan fungsi yang membutuhkan hitungan menit untuk dihitung, sehingga mungkin masih lebih sesuai dengan kebutuhan Anda.Untuk dapat menjalankan
/bin/bash
executable pada fungsi bash, kita harus mengekspor fungsi terlebih dahulu.Oleh karena itu, dalam kasus Anda, untuk dapat menggunakan
/usr/bin/time
dan menghasilkan format output yang Anda inginkan, Anda dapat melanjutkan sebagai berikut:sumber
-f
parameternya, saya tidak dapat menemukan ini. Kedua, apa artinya / bin / bash? Sangat menghargai itu!-f
parameter untukexport
memberitahuexport
untuk mengekspor fungsi shell. Lihathelp export
. The-f
parameter untuk/usr/bin/time
memberitahu/usr/bin/time
mengharapkan format string, tapi aku menganggap ini Anda tahu. Bagian/bin/bash
dari perintah terakhir adalah bash executable yang waktu eksekusi sebenarnya diukur, ketika itu sendiri mengeksekusimka
fungsi yang diekspor . Menjalankanmka
fungsi karena membaca dan mengeksekusimka -j8 bacon
perintah dari input standar, itulah sebabnya kami menggunakanecho
dan sebuah pipa. Maaf atas jawaban yang terlambat, baca saja ini. :)