Thread View: pl.comp.os.linux.programowanie
16 messages
16 total messages
Started by Daniel Mróz
Wed, 08 Sep 1999 16:52
Jak rozpoznac init?
Author: Daniel Mróz
Date: Wed, 08 Sep 1999 16:52
Date: Wed, 08 Sep 1999 16:52
22 lines
1659 bytes
1659 bytes
Czesc :))) Nareszcie na news.tpnet.pl wlaczyli pcolp do drzewka... Pytanie prawdopodobnie trywialne, ale nie wiem jak to rozwiazac. Jak wykryc czy program zostal uruchomiony przez init'a? Probowalem sprawdzac ID przywodcy procesow, ale najwyrazniej shell odpalajacy programy ze skryptow startowych odcina sie od inita, bo zazwyczaj otrzymuje wynik 112, czy 114. Sprawdzanie obowiazujacego ID uzytkownika tez nie wchodzi w gre, gdyz chce rozroznic miedzy odpalaniem programu z init z prawami root'a a odpalaniem przez samego root'a. Ew. co poczytac/czego szukac. P.S. Mam nadzieje, ze nie zamotalem. Pozdrawiam Beorn -- ------------------------------------------------------------------------------- Daniel 'Beorn' Mróz beorn@alpha.pl ----------------------------------ooo^..^ooo-----------------------------------
Re: Jak rozpoznac init?
Author: Marcin Kadziolka
Date: Wed, 08 Sep 1999 18:05
Date: Wed, 08 Sep 1999 18:05
18 lines
1433 bytes
1433 bytes
Daniel Mróz <beorn@cyberdeck.digital.pl> wrote:
> Pytanie prawdopodobnie trywialne, ale nie wiem jak to rozwiazac. Jak wykryc czy
> program zostal uruchomiony przez init'a? Probowalem sprawdzac ID przywodcy
getppid() == 1
Tyle że to nie do końca pewne, bo jeśli program zostanie odpalony z shella i
ten zakończy swoją pracę nie czekając na zakończenie naszego programu, to
init stanie się procesem macierzystym naszego programu.
> P.S. Mam nadzieje, ze nie zamotalem.
Mam nadzieję że to dobre rozwiązanie ;)
--
Na razie | Running Windows on a Pentium is like having a brand new Porsche
Marcin | but only be able to drive backwards with the handbrake on.
Re: Jak rozpoznac init?
Author: Andrzej Radecki
Date: Wed, 08 Sep 1999 21:19
Date: Wed, 08 Sep 1999 21:19
24 lines
1516 bytes
1516 bytes
Daniel Mróz <beorn@cyberdeck.digital.pl> pisze: > >Pytanie prawdopodobnie trywialne, ale nie wiem jak to rozwiazac. Jak >wykryc czy program zostal uruchomiony przez init'a? Probowalem sprawdzac >ID przywodcy procesow, ale najwyrazniej shell odpalajacy programy ze >skryptow startowych odcina sie od inita, bo zazwyczaj otrzymuje wynik 112, >czy 114. Sprawdzanie obowiazujacego ID uzytkownika tez nie wchodzi w gre, >gdyz chce rozroznic miedzy odpalaniem programu z init z prawami root'a a >odpalaniem przez samego root'a. Ew. co poczytac/czego szukac. Może wystarczy getppid() ? Zresztą napisz: ps afxl i zobacz jakie są numery ppid'ów. Tyle tylko, że ppid'y procesów odpalanych ze skryptów startowych przyjmują wartość 1 dopiero po zakończeniu działania tych skryptów (chyba). Pozdrawiam, -- ( /6/ Andrzej Radecki ==== \ radecki@wpk.p.lodz.pl / | http://www.wpk.p.lodz.pl/~radecki
Re: Jak rozpoznac init?
Author: Przem Kowalczyk
Date: Wed, 08 Sep 1999 22:37
Date: Wed, 08 Sep 1999 22:37
35 lines
2037 bytes
2037 bytes
Daniel Mróz in pl.comp.os.linux.programowanie wrote:
>
>Czesc :)))
>Nareszcie na news.tpnet.pl wlaczyli pcolp do drzewka...
>
>Pytanie prawdopodobnie trywialne, ale nie wiem jak to rozwiazac. Jak wykryc czy
>program zostal uruchomiony przez init'a? Probowalem sprawdzac ID przywodcy
>procesow, ale najwyrazniej shell odpalajacy programy ze skryptow startowych
>odcina sie od inita, bo zazwyczaj otrzymuje wynik 112, czy 114. Sprawdzanie
>obowiazujacego ID uzytkownika tez nie wchodzi w gre, gdyz chce rozroznic miedzy
>odpalaniem programu z init z prawami root'a a odpalaniem przez samego root'a.
>Ew. co poczytac/czego szukac.
>
>P.S. Mam nadzieje, ze nie zamotalem.
Troszeczkę.
Jest taka miła funkcja getppid:
GETPID(2) Linux Programmer's Manual GETPID(2)
NAME
getpid, getppid - get process identification
DESCRIPTION
getpid returns the process ID of the current process. (This is often
used by routines that generate unique temporary file names.)
getppid returns the process ID of the parent of the current process.
Przem
--
Blood from a stone, water from wine.
Born under an ill-placed sign.
R.E.M
Re: Jak rozpoznac init?
Author: Kamil Jonca
Date: Thu, 09 Sep 1999 01:02
Date: Thu, 09 Sep 1999 01:02
20 lines
1512 bytes
1512 bytes
Dnia Wed, 08 Sep 1999 16:52:41 GMT,
osoba podpisana: Daniel Mróz <beorn@cyberdeck.digital.pl>
napisała:
>
>Czesc :)))
>Nareszcie na news.tpnet.pl wlaczyli pcolp do drzewka...
>
>Pytanie prawdopodobnie trywialne, ale nie wiem jak to rozwiazac. Jak wykryc czy
To nie jest trywialne :) W cegle Stewnsa jest dużo tekstu na ten temat i
konkluzja jest taka "nie da sie" w 100%
Inaczej jeśli getppid()!=1 to na pewno nie przez init
natomiast inaczej nie bardzo wiadomoe
KJ
--
Kamil Jońca kj153553@zodiac2.mimuw.edu.pl
Q: How do you shoot a pink elephant?
A: Twist its trunk until it turns blue, then shoot it with
a blue-elephant gun.
Re: Jak rozpoznac init?
Author: Daniel Mróz
Date: Thu, 09 Sep 1999 08:03
Date: Thu, 09 Sep 1999 08:03
15 lines
1462 bytes
1462 bytes
On 8 Sep 1999 18:05:43 GMT, Marcin Kadziolka <kalma@polsl.gliwice.pl> wrote: >> Pytanie prawdopodobnie trywialne, ale nie wiem jak to rozwiazac. Jak wykryc czy >> program zostal uruchomiony przez init'a? Probowalem sprawdzac ID przywodcy >getppid() == 1 Probowalem i dostaje PPID taki sam jak proces przywodcy grupy, czyli shell sie odcina :( Pozdrawiam Beorn -- ------------------------------------------------------------------------------- Daniel 'Beorn' Mróz beorn@alpha.pl ----------------------------------ooo^..^ooo-----------------------------------
Re: Jak rozpoznac init?
Author: Daniel Mróz
Date: Thu, 09 Sep 1999 08:03
Date: Thu, 09 Sep 1999 08:03
17 lines
1720 bytes
1720 bytes
On 9 Sep 1999 01:02:02 GMT, Kamil Jonca <kjonca@kjonca.kjonca.bogus> wrote: >>Pytanie prawdopodobnie trywialne, ale nie wiem jak to rozwiazac. Jak wykryc czy >To nie jest trywialne :) W cegle Stewnsa jest dużo tekstu na ten temat i >konkluzja jest taka "nie da sie" w 100% >Inaczej jeśli getppid()!=1 to na pewno nie przez init >natomiast inaczej nie bardzo wiadomoe Wlasnie :/. Qrde...musi byc jakis sposob...Bede dalej probowal...Dzieki za pomoc. Pozdrawiam Beorn -- ------------------------------------------------------------------------------- Daniel 'Beorn' Mróz beorn@alpha.pl ----------------------------------ooo^..^ooo-----------------------------------
Re: Jak rozpoznac init?
Author: Robert Luberda
Date: Thu, 09 Sep 1999 12:25
Date: Thu, 09 Sep 1999 12:25
24 lines
1584 bytes
1584 bytes
Daniel Mróz <beorn@cyberdeck.digital.pl> wrote:
> On 9 Sep 1999 01:02:02 GMT, Kamil Jonca <kjonca@kjonca.kjonca.bogus> wrote:
>>To nie jest trywialne :) W cegle Stewnsa jest dużo tekstu na ten temat i
>>konkluzja jest taka "nie da sie" w 100%
>>Inaczej jeśli getppid()!=1 to na pewno nie przez init
>>natomiast inaczej nie bardzo wiadomoe
> Wlasnie :/. Qrde...musi byc jakis sposob...Bede dalej probowal...Dzieki za
> pomoc.
W manie do inita jest napisane, że
"Init sets the following environment variables for all its children:
[...]
INIT_VERSION
[...] Useful to determine if a script runs directly from init."
Czyli:
if (getppid()==1 && getenv("INIT_VERSION"))
printf("_Najprawdopodobniej_ moim ojcem jest init!");
Pozdrowienia,
Robert
--
robert@pingu.ii.uj.edu.pl
Re: Jak rozpoznac init?
Author: Daniel Mróz
Date: Thu, 09 Sep 1999 21:44
Date: Thu, 09 Sep 1999 21:44
27 lines
2016 bytes
2016 bytes
On 9 Sep 1999 12:25:03 GMT, Robert Luberda <robert@pingu.ii.uj.edu.pl> wrote:
>>>Inaczej jeśli getppid()!=1 to na pewno nie przez init
>>>natomiast inaczej nie bardzo wiadomoe
>> Wlasnie :/. Qrde...musi byc jakis sposob...Bede dalej probowal...Dzieki za
>> pomoc.
>W manie do inita jest napisane, że
>"Init sets the following environment variables for all its children:
> [...]
>INIT_VERSION
> [...] Useful to determine if a script runs directly from init."
Qrde...Jak moglem zapomniec o manie do inita?!?!?
>Czyli:
>if (getppid()==1 && getenv("INIT_VERSION"))
> printf("_Najprawdopodobniej_ moim ojcem jest init!");
A w jakim przypadku moze byc ustawiona ta zmienna lecz proces nie odpalony z
inita? Czy sytuacja, gdy zmienna jest ustawiona choc nie powinna byc, zdaza sie
czesto?
Pozdrawiam
Beorn
--
-------------------------------------------------------------------------------
Daniel 'Beorn' Mróz
beorn@alpha.pl
----------------------------------ooo^..^ooo-----------------------------------
Re: Jak rozpoznac init?
Author: Daniel Mróz
Date: Fri, 10 Sep 1999 05:30
Date: Fri, 10 Sep 1999 05:30
22 lines
1712 bytes
1712 bytes
On 8 Sep 1999 21:19:15 GMT, Andrzej Radecki <radecki@wpk.p.lodz.pl> wrote: >>wykryc czy program zostal uruchomiony przez init'a? Probowalem sprawdzac [...] >Może wystarczy getppid() ? Juz probowalem. Nic z tego... >Zresztą napisz: >ps afxl >i zobacz jakie są numery ppid'ów. Tyle tylko, że ppid'y procesów odpalanych >ze skryptów startowych przyjmują wartość 1 dopiero po zakończeniu działania >tych skryptów (chyba). Raczej tak. Procesy odpalane przez init w momencie pracy maja PPID != 1 (podejrzewam, ze shell je odpalajacy robi siebie przywodca procesow). Pozdrawiam Beorn -- ------------------------------------------------------------------------------- Daniel 'Beorn' Mróz beorn@alpha.pl ----------------------------------ooo^..^ooo-----------------------------------
Re: Jak rozpoznac init?
Author: Robert Luberda
Date: Fri, 10 Sep 1999 12:22
Date: Fri, 10 Sep 1999 12:22
36 lines
1984 bytes
1984 bytes
Daniel Mróz <beorn@cyberdeck.digital.pl> wrote:
>>Czyli:
>>if (getppid()==1 && getenv("INIT_VERSION"))
>> printf("_Najprawdopodobniej_ moim ojcem jest init!");
> A w jakim przypadku moze byc ustawiona ta zmienna lecz proces nie odpalony z
> inita?
Jak ktoś będzie bardzo złośliwy, to może napisać sobie np. taki
programik:
main()
{
setenv("INIT_VERSION", "blablabla", 1);
if (fork()) exit(0);
execl("twoj_program", ....);
}
a wtedy i getppid() == 1, i zmienna INIT_VERSION jest zdefiniowana.
A tak bardziej poważnie, wydaje mi się, że skoro INIT_VERSION jest
zmienną środowiska, czyli jest ona dziedziczona przez procesy potomne,
więc każdy program uruchamiany podczas startu systemu ma tę zmienną
zdefiniowaną (bo te demony są uruchamaine przez shella, który jest
uruchamiany przez init-a), zresztą łatwo to sprawdzić przeglądając
sobie pliki /proc/<pid>/environ, gdzie <pid> jest nr procesu jakiegoś
daemona. Na szczęście daemony te mają zaraz po starcie (a przed forkiem)
ppid != 1, więc wiadomo, że ich ojcem nie jest init.
Pozdrowienia,
Robert
--
robert@pingu.ii.uj.edu.pl
Re: Jak rozpoznac init?
Author: Marcin Kadziolka
Date: Fri, 10 Sep 1999 12:28
Date: Fri, 10 Sep 1999 12:28
15 lines
1697 bytes
1697 bytes
Daniel Mróz <beorn@cyberdeck.digital.pl> wrote:
> >if (getppid()==1 && getenv("INIT_VERSION"))
> > printf("_Najprawdopodobniej_ moim ojcem jest init!");
> A w jakim przypadku moze byc ustawiona ta zmienna lecz proces nie odpalony z
> inita? Czy sytuacja, gdy zmienna jest ustawiona choc nie powinna byc, zdaza sie
> czesto?
IMHO jeśli proces odpalony z tą zmienną zrobi fork i exec bez podania
środowiska, to proces potomny odziedziczy środowisko wraz z tą zmienną.
Tyle że wtedy getppid() w tym potomnym procesie będzie != 1.
--
Na razie | Running Windows on a Pentium is like having a brand new Porsche
Marcin | but only be able to drive backwards with the handbrake on.
Re: Jak rozpoznac init?
Author: Daniel Mróz
Date: Fri, 10 Sep 1999 18:52
Date: Fri, 10 Sep 1999 18:52
10 lines
1336 bytes
1336 bytes
Dziekuje wszystkim za pomoc :) Pozdrawiam Beorn -- ------------------------------------------------------------------------------- Daniel 'Beorn' Mróz beorn@alpha.pl ----------------------------------ooo^..^ooo-----------------------------------
Re: Jak rozpoznac init?
Author: Kamil Jonca
Date: Fri, 10 Sep 1999 18:53
Date: Fri, 10 Sep 1999 18:53
18 lines
1543 bytes
1543 bytes
Dnia 10 Sep 1999 12:22:29 GMT, osoba podpisana: Robert Luberda <robert@pingu.ii.uj.edu.pl> napisała: [..] >A tak bardziej poważnie, wydaje mi się, że skoro INIT_VERSION jest >zmienną środowiska, czyli jest ona dziedziczona przez procesy potomne, Niekoniecznie (hint "export" w shellu) Wydaje mi się że użycie owej zmiennej jest najlepszą metodą [...] KJ -- Kamil Jońca kj153553@zodiac2.mimuw.edu.pl Keyboard error press F1 continue
Re: Jak rozpoznac init?
Author: Marcin 'Qrczak' Kowalczyk
Date: Sat, 11 Sep 1999 12:16
Date: Sat, 11 Sep 1999 12:16
19 lines
2071 bytes
2071 bytes
10 Sep 1999 18:53:57 GMT, Kamil Jonca <kjonca@kjonca.kjonca.bogus> pisze:
> >A tak bardziej poważnie, wydaje mi się, że skoro INIT_VERSION jest
> >zmienną środowiska, czyli jest ona dziedziczona przez procesy potomne,
>
> Niekoniecznie (hint "export" w shellu)
Koniecznie. export jest wewnętrznym mechanizmem szela. Zmienne
środowiska się dziedziczą, chyba że proces sam zadba, żebo jego
dzieci miały inne środowisko. Zmienne, które nie są wyexportowane,
nie dość, że mogą być wyrzucane w procesach potomnych, to jeszcze
w ogóle nie muszą być prawdziwymi zmiennymi środowiska! Przecież
nie widać, gdzie szel je sobie trzyma.
--
__("< Marcin Kowalczyk * qrczak@knm.org.pl http://kki.net.pl/qrczak/
\__/ GCS/M d- s+:-- a22 C+++>+++$ UL++>++++$ P+++ L++>++++$ E-
^^ W++ N+++ o? K? w(---) O? M- V? PS-- PE++ Y? PGP->+ t
QRCZAK 5? X- R tv-- b+>++ DI D- G+ e>++++ h! r--%>++ y-
Re: Jak rozpoznac init?
Author: Kamil Jonca
Date: Sat, 11 Sep 1999 15:25
Date: Sat, 11 Sep 1999 15:25
15 lines
1622 bytes
1622 bytes
Dnia 11 Sep 1999 12:16:49 GMT, osoba podpisana: Marcin 'Qrczak' Kowalczyk <qrczak@knm.org.pl> napisała: [...] >Koniecznie. export jest wewnętrznym mechanizmem szela. Zmienne >środowiska się dziedziczą, chyba że proces sam zadba, żebo jego Oops, kajam się. Rzeczywiście jest tak jak mówisz. Tak to jest jak się pisze za dużo skrytów. ;( KJ -- Kamil Jońca kj153553@zodiac2.mimuw.edu.pl Suma inteligencji na planecie jest stala, liczba ludzi powieksza sie.
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads