Skocz do zawartości

Wrzucenie Czasu Wykonania Programu Do Zmiennej


thof

Rekomendowane odpowiedzi

Pomózcie z bashem, bo juz nie wytrzymuje...

Uruchamiam program i chcialbym jego czas przekazac do zmiennej. Wszystko jest ok dopóki nie wywolam tego programu z tle, bo wtedy juz czas nie jest zapisywany.

Czyli w ten sposób dziala:

$  zm=$((time sleep 20) 2>&1 > /dev/null)
$  pkill sleep
$  echo $zm
real 0m2.230s user 0m2.130s sys 0m0.030s

Ale juz z uruchomieniem w tle nie:

$  zm=$((time sleep 20) 2>&1 > /dev/null) &
$  pkill sleep 20
$  echo $zm
<no i jest pusta lub ma stara wartosc>

Sleep zostal uzyty tylko jako przyklad. Naprawde nie wiem juz co zrobic :angry:

Odnośnik do komentarza
Udostępnij na innych stronach

mysle, ze magicznym slówkiem tutaj jest wait

 

#!/bin/bash

zm=$(time sleep 20 2>&1 > /dev/null) &
echo dalej
sleep 3
pkill sleep # to nie rozróznia, który 'sleep' ma ubic
wait # help wait
echo $zm

 

pkill - przyjmuje nazwe programu bez parametrów, wedlug man leci hurtem jak pgrep

 

[edit]

swoja droga to ciekawe, ze przekazujesz 1 i 2 do /dev/null a mimo to masz wynik. KePaSa ??

Odnośnik do komentarza
Udostępnij na innych stronach

No nie, z waitem czy bez nie dziala. Wazne sa tez nawiasy przed przekierowaniem zm=$((time sleep 20) 2>&1 > /dev/null) &. Chcialem uniknac robienia tego na plikach, ale no trudno w ten sposób przynajmniej dziala:

zm=$(time (nice -20 sleep 5) 2>time.out) &
pkill sleep
cat time.out
real	0m0.502s
user	0m0.000s
sys	0m0.000s

Dobre i to. Co do pkilla to wiem. To byl tylko przyklad i dla wygodny w ten sposób ubijalem.

Odnośnik do komentarza
Udostępnij na innych stronach

Przejrzyj ten fragment i spójrz jak używa się time'a w procesach potomnych.

 

[pat@xps1330 ~]$ #Nie idzie do nulla, bo pisze po tty. Dlaczego? Bo wyjście aplikacji "sleep 2" jest skierowane do nulla, a nie time.
[pat@xps1330 ~]$ time sleep 2 &> /dev/null

real	0m2.003s
user	0m0.001s
sys	0m0.002s
[pat@xps1330 ~]$ #A teraz idzie do nulla.
[pat@xps1330 ~]$ /usr/bin/time sleep 2 &> /dev/null
[pat@xps1330 ~]$ #Przechwytywanie wyjścia time w procesach potomnych. Obsługuje formatowanie 
[pat@xps1330 ~]$ /usr/bin/time sleep 2 
0.00user 0.00system 0:02.00elapsed 0%CPU (0avgtext+0avgdata 2224maxresident)k
0inputs+0outputs (0major+169minor)pagefaults 0swaps
[pat@xps1330 ~]$ 

Spędziłem nad tym kiedyś cały dzień... It really does the trick ;)

Odnośnik do komentarza
Udostępnij na innych stronach

No tak ścieżka do /usr/bin. Wcześniej gdzieś o tym czytałem i przez jakiś czas podawałem /usr/bin/time, ale potem coś zacząłem kombinować i powróciłem znowu do zwykłego time. W sumie zostanę przy plikach, bo tu znowu ucina znak nowej linii i musiałbym znowu zmieniać. Dzięki.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
×
×
  • Dodaj nową pozycję...