Fórum Root.cz
Hlavní témata => Server => Téma založeno: Pepa 06. 11. 2017, 14:59:47
-
Ahoj, potřebuji spustit funkci s názvem test_f a uvnitř té funkce potřebuji sjistit PID te spuštěné funkce test_f. Jde to nějak? Děkuji
-
shell proměnná $$
-
shell proměnná $$
teď jsem si uvědomil, žes nenapsal, v jakém jazyce to chceš: nějak jsem předpokládal shellscipt, nevím proč
PID se neváže k funkcím, ale k procesům
zjistí ho třeba fce getpid() v C
-
Omlouvám se, jedná se o shell ;) ale stejně PID nesedí
function test_f(){
echo $$ > /pid
}
test_f&
v souboru /pid mám jiný PID než ve skutečnosti ten proces má.
-
Co znamená to & ? Jestli to, co intuitivně chápu já, tudíž, že to spustí na pozadí, tak se tam udělá fork,
a v něm se spustí funkce test_f, pak pochopitelně do /pid se zapíše tohle pid toho "forku", fork si v
klidu skončí, všechno je vpořádku a pravda, ale v /pid pid toho, v čem běžela ta funkce, ale ne pid
toho hlavního skriptu.
-
https://unix.stackexchange.com/a/305361
Curly brace functions will run within the calling shell process, unless they need their own subshell which is:
when you run them in the background with &
when you run them as a link in a pipeline
Ty tam máš background, takže nový PID. Takže http://tldp.org/LDP/abs/html/internalvariables.html - $!, $$, $PPID, $BASHPID
-
jinak - jste si jisty, ze je dobry napad ukladat neco do /pid, tj. do root adresare? Neni lepsi nekde v tmp udelat uniq. soubor?
-
Co znamená to & ?
Spuštění na pozadí.
-
jinak - jste si jisty, ze je dobry napad ukladat neco do /pid, tj. do root adresare? Neni lepsi nekde v tmp udelat uniq. soubor?
Není je to jen příklad, všechno patří to /tmp
-
... ale v /pid pid toho, v čem běžela ta funkce, ale ne pid
toho hlavního skriptu.
opačně, ne? ;)
-
... ale v /pid pid toho, v čem běžela ta funkce, ale ne pid
toho hlavního skriptu.
opačně, ne? ;)
Nevím. Vlastně záleží na tom, kdy se to $$ vyhodnotí, a to nevím. Víte to někdo, jen pro úplnost?
-
ne, v $$ je pid funkce test_f v době jejího spuštění. Výrazy (expression) uzavřené v {} nebo () se vyhodnocují až jejich voláním.
edit:
k původnímu dotazu. Funkce se chová správně, jak už ostatní psali, přidáním & za volání test_f vytvoříš nový proces, v něm si uložíš pid a pak se vrátíš zpět. Neměl bys ale nikdy volat & aniž bys za tím neměl alespoň wait, on se ti totiž ukončil i bash a pokud bys uvnitř test_f měl delší funkci, běží i po ukončení té hlavní, což je super.
Dej pryč ten & a budeš tam mít pid hlavní funkce. Podle tvého dotazu se ale kód chová správně, samotná funkce nemá žádné pid, to má až samotný proces.
-
On si je zjevně vědom toho, že ta funkce běží v novém procesu, chce to tak a je to naprosto legitimní. Teď chce zjistit PID toho procesu -- dustin už odpověděl, je to v $BASHPID. KONEC!