Jak zjistit PID spuštěné funkce

Pepa

Jak zjistit PID spuštěné funkce
« kdy: 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


Danny

Re:Jak zjistit PID spuštěné funkce
« Odpověď #1 kdy: 06. 11. 2017, 15:21:15 »
shell proměnná $$

Danny

Re:Jak zjistit PID spuštěné funkce
« Odpověď #2 kdy: 06. 11. 2017, 15:22:46 »
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

Pepa

Re:Jak zjistit PID spuštěné funkce
« Odpověď #3 kdy: 06. 11. 2017, 15:38:58 »
Omlouvám se, jedná se o shell ;) ale stejně PID nesedí

Kód: [Vybrat]
function test_f(){
          echo $$ > /pid
}

test_f&

v souboru /pid mám jiný PID než ve skutečnosti ten proces má.

pb

Re:Jak zjistit PID spuštěné funkce
« Odpověď #4 kdy: 06. 11. 2017, 15:59:17 »
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.


dustin

Re:Jak zjistit PID spuštěné funkce
« Odpověď #5 kdy: 06. 11. 2017, 15:59:57 »
https://unix.stackexchange.com/a/305361

Citace
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

armabeton

Re:Jak zjistit PID spuštěné funkce
« Odpověď #6 kdy: 06. 11. 2017, 16:16:07 »
jinak - jste si jisty, ze je dobry napad ukladat neco do /pid, tj. do root adresare? Neni lepsi nekde v tmp udelat uniq. soubor?

Pepa

Re:Jak zjistit PID spuštěné funkce
« Odpověď #7 kdy: 06. 11. 2017, 16:30:04 »
Co znamená to & ?
Spuštění na pozadí.

Pepa

Re:Jak zjistit PID spuštěné funkce
« Odpověď #8 kdy: 06. 11. 2017, 16:31:10 »
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

Pepa

Re:Jak zjistit PID spuštěné funkce
« Odpověď #9 kdy: 06. 11. 2017, 16:33:57 »
... ale v /pid pid toho, v čem běžela ta funkce, ale ne pid
toho hlavního skriptu.
opačně, ne? ;)

pb

Re:Jak zjistit PID spuštěné funkce
« Odpověď #10 kdy: 07. 11. 2017, 07:55:35 »
... 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?

Tomas2

  • ****
  • 310
    • Zobrazit profil
    • E-mail
Re:Jak zjistit PID spuštěné funkce
« Odpověď #11 kdy: 07. 11. 2017, 08:35:38 »
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.
« Poslední změna: 07. 11. 2017, 08:39:58 od Tomas2 »

.

Re:Jak zjistit PID spuštěné funkce
« Odpověď #12 kdy: 07. 11. 2017, 16:15:36 »
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!