🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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?
#207
Author: Daniel Mróz
Date: Wed, 08 Sep 1999 16:52
22 lines
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?
#208
Author: Marcin Kadziolka
Date: Wed, 08 Sep 1999 18:05
18 lines
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?
#210
Author: Andrzej Radecki
Date: Wed, 08 Sep 1999 21:19
24 lines
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?
#212
Author: Przem Kowalczyk
Date: Wed, 08 Sep 1999 22:37
35 lines
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?
#213
Author: Kamil Jonca
Date: Thu, 09 Sep 1999 01:02
20 lines
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?
#209
Author: Daniel Mróz
Date: Thu, 09 Sep 1999 08:03
15 lines
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?
#214
Author: Daniel Mróz
Date: Thu, 09 Sep 1999 08:03
17 lines
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?
#215
Author: Robert Luberda
Date: Thu, 09 Sep 1999 12:25
24 lines
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?
#216
Author: Daniel Mróz
Date: Thu, 09 Sep 1999 21:44
27 lines
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?
#211
Author: Daniel Mróz
Date: Fri, 10 Sep 1999 05:30
22 lines
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?
#217
Author: Robert Luberda
Date: Fri, 10 Sep 1999 12:22
36 lines
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?
#222
Author: Marcin Kadziolka
Date: Fri, 10 Sep 1999 12:28
15 lines
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?
#218
Author: Daniel Mróz
Date: Fri, 10 Sep 1999 18:52
10 lines
1336 bytes
Dziekuje wszystkim za pomoc :)

Pozdrawiam
Beorn

-- 
-------------------------------------------------------------------------------
Daniel 'Beorn' Mróz
beorn@alpha.pl
----------------------------------ooo^..^ooo-----------------------------------
Re: Jak rozpoznac init?
#219
Author: Kamil Jonca
Date: Fri, 10 Sep 1999 18:53
18 lines
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?
#220
Author: Marcin 'Qrczak' Kowalczyk
Date: Sat, 11 Sep 1999 12:16
19 lines
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?
#221
Author: Kamil Jonca
Date: Sat, 11 Sep 1999 15:25
15 lines
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