thof Napisano Listopad 27, 2010 Zgłoszenie Share Napisano Listopad 27, 2010 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 Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
borzole Napisano Listopad 27, 2010 Zgłoszenie Share Napisano Listopad 27, 2010 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 More sharing options...
thof Napisano Listopad 27, 2010 Autor Zgłoszenie Share Napisano Listopad 27, 2010 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 More sharing options...
Gość _PaT Napisano Grudzień 2, 2010 Zgłoszenie Share Napisano Grudzień 2, 2010 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 More sharing options...
thof Napisano Grudzień 2, 2010 Autor Zgłoszenie Share Napisano Grudzień 2, 2010 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 More sharing options...
borzole Napisano Grudzień 2, 2010 Zgłoszenie Share Napisano Grudzień 2, 2010 command time to będzie to samo co /usr/bin/time warto też czasem wpisać type -a time lub help -m | less * a tak na marginesie, posłużenie się zewnętrznym plikiem to jedyny sposób, nie da się przekazać zmiennej z subshell Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Rekomendowane odpowiedzi
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ę