Portál AbcLinuxu, 10. května 2025 05:52

Dotaz: Změna rodiče

26.7.2004 16:20 Martin
Změna rodiče
Přečteno: 137×
Odpovědět | Admin
Dobrý den, mám následující dotaz.Je v Linuxu funkční volání jádra "setpgrp" stejně jako je to běžně uváděno pro Unix? Mám třeba: .. .. ..

main(void) ( -vím,to je špatná závorka- . . setpgrp(); while(1) -a třeba nekonečný cyklus-- Po překladu program spustim a čekal bych že jako rodiče bude mít proces "init" ale není tomu tak, podle vypisu ps apod. je jeho rodičem stále bash ze kterého byl spuštěn. Pokud mi někdo napíše co zapomínám nebo nevím budu rád, děkuji velmi. M.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

26.7.2004 16:24 Martin
Rozbalit Rozbalit vše Re: Změna rodiče
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ještě jsem zapomněl napsat, jádro je 2.4.19.Díky.
26.7.2004 16:51 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Re: Změna rodiče
Odpovědět | | Sbalit | Link | Blokovat | Admin
setpgrp nasatvuje pgid a ne ppid! ps xf vypisuje zavislost mezi procesi na zaklade ppid. setpgrp je to co dela nohup a schvalne si zkus, ze zustane child bashe a pritom pri ukonceni nedostane SIGHUP. Prave k tomu je urceno pgid.
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
26.7.2004 17:48 Martin
Rozbalit Rozbalit vše Re: Změna rodiče
Děkuji za odpověď, já jsem tomu původně rozumněl tak že zavolání setpgrp změní volající proces na vedoucího skupiny a jeho parent bude proces s pid 1, tedy init. Alespoń se to tak píše v literatuře o Unixu.Docela by mne zajímalo jestli to je rozdíl mezi linuxem a unixem.Jinak díky.M.
27.7.2004 15:56 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Re: Změna rodiče
setpgrp() je alias na volání setpgid(0,0) což zamená, že se změní pgid aktuálního procesu na 0 jak je ostatně jasně posáno v man stránce. Tedy parent group se nastaví sheduler jádra, což odpovídá přesně tomu co se píše v literatuře o unixu (Linuxové jádro je trochu odlišné v tom, že init proces je proces jako každý jiný narozdíl od některých unixů kde je procest init přímo v jádře a má pid=0!), problém je v tom, že zaměňujete parent proces id (ppid) za parent (terminal) group id (pgid) což jsou dvě naprosto odlišné věci. Asi by jste tu literaturu měl prostudovat pozorněji znova, nebo jste možná šáhl po špatné literatuře.
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
27.7.2004 20:16 Martin
Rozbalit Rozbalit vše Re: Změna rodiče
Velmi Vám děkuji.Já jsem četl UNIX POSIX PLAN 9 od Lu. Skoč. a špatně jsem to interpretoval. Pgid je tedy čislo které mi vrátí getpgrp(). To ale nebývá 0, scheduler asi vždy dosadí pgid jako číslo blízké pgid původní terminálové skupiny kam proces patřil před voláním sepgrp(). Ale ano, oni vlastně píšou je-li požadavek na nové pgid 0 tak je použit pid volajícího procesu.Aha. Také mne překvapilo že pgid procesu "pod" bashem má pgid jako svůj pid, myslel jsemže bash je lídrem který otevřel terminál a pgid procesu "pod ním" bude mít pgid jako má bash pid,tedy vlastně jako je pid bashe,aha ale já vlastně nevím jestli bash sám nevolá setpgrp(). Zkoušel jsem pustit procesy na pozadí pod bashem a ty které volali setpgrp() po ukončení bashe pokračovali dál ostatní asi dostali SIGHUP jak jste mi psal a skončili. No a podobně bych tedy čekal že když normálně rozjedu dva procesy kde rodič zavolá setpgrp(),bude tedy lídrem skupiny(?) a bude mít normálně pod sebou child,tak když rodič zavolá exit(), měl by skončit i child ???. Jinak Vám strašně děkuju, rád bych se ravanšoval ale navím jak.Martin
28.7.2004 08:48 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Re: Změna rodiče
UNIX POSIX PLAN 9 od Lu. Skoč. - wow, to jsem četl taky :-D Dost dobrá knížka i když místy ukázkové zdrojáky obsahují drobnou chybku. Sheduler nic nedosazuje, dosazuje jádro a ten dosadí pgid rodičovského procesu při fork() (přesněji ho prostě nechá stejné :-), skopíruje záznam procesu v jádře, tak jak je, jen mu dá nové pid a nastaví ppid na rodiče - to vám ostatně vrátí fork() ). Ten rodič musí zavolat setpgrp() samozřejmě před fork() svých potomků, no a potom při ukončení terminálu by měl dostat SIGHUP a všichni jeho potomci, jak je to s exit() nevím. To by chtělo asi vyzkoušet.
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
28.7.2004 17:10 Martin
Rozbalit Rozbalit vše Re: Změna rodiče
No já jsem se teď dočetl že když bash spouští další proces tak opravdu postupuje fork,setpgrp,exec. Proto je pgid nového procesu totožné jako pid nového procesu.To jsem nevěděl. Já vlastně nechápu nějakou základní věc.Všude v literatuře se uvádí že child je existenčně zavislý na rodiči.Dokonce se přímo uvádí toto jako výhoda,neboť u rozsáhlého programového systému stačí ukončit rodiče a automaticky skončí všechny "jeho" dětské procesy. Jinak ovšem když naprogramujete jednoduše parent a jeho child a necháte parent dříve ukončit, child potom pokračuje a jako "sirotek" má pgid rovno 1,tedy parent je init. jak to vlastně koresponduje s onou existenční závislostí ?? M.
29.7.2004 08:23 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Re: Změna rodiče
No s tou závislostí jsem to taky moc nepochopil. Luděk píše, něco v tom smyslu, že když zanikne rodič a jeho potomci jsou v jeho pgid (jejich pgid == pid toho rodiče) tak by měli skončit s ním (jestli to udělá jádro, nebo to musí udělat sám třeba killpg, nevím). Pokud ale děti jsou v jiné (třeba své vlastní) pgid, tak by mělo jádro samo po smrti rodiče nastavit jejich ppid na 1. To chce odzkoušet nebo nastudovat. Skočovský je dobrý, ale jak říkám, jsou tam občas chybky a nepřesnosti a hlavně je to jen takový úvod. Pro hloubkové proniknutí to asi chce nějaký skripta o unix OS, nebo přímo normu.
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
29.7.2004 22:42 #2453 | skóre: 21
Rozbalit Rozbalit vše Re: Změna rodiče
Odpovědět | | Sbalit | Link | Blokovat | Admin
Taky bych vymenil rodice...
30.7.2004 12:32 Martin
Rozbalit Rozbalit vše Re: Změna rodiče
Ovšem zavolat setpgrp z okna (nebo dokonce z wokna) Vám tedy nepomůže, protože jak už jsem pochopil se tím pgid nemění. Nojo, ono pokud se vedoucímu skupiny pošle kill -9 -jeho pid (tedy záporná hodnota jeho pid), tak všichni jeho potomci skončí, ovšem ti potomci kteří dříve volali setpgrp tak ti běží dál, aha aha tak to je stopa, možná že to někdy snad i pochopim. Martin
30.7.2004 14:13 Martin
Rozbalit Rozbalit vše Re: Změna rodiče
v té první větě má být ppid samozřejmě.M

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.