Portál AbcLinuxu, 12. května 2025 06:24

Dotaz: Jak kontrolovat PID?

21.10.2012 17:15 Orlando
Jak kontrolovat PID?
Přečteno: 506×
Odpovědět | Admin
Ahoj,

spustím v příkazové řádce na pozadí příkaz

mysqldump ............ &

zjistím jaký mu byl přidělen PID

VAR=$!

echo $VAR

a teď můj problém, nevím jak bych mohl zjistit, jestli PID ještě existuje, jelikož se může stát, že příkaz skončil ale mezi tím byl stejný PID přidělen zcela jinému procesu. Neporadil by někdo jak zjistit jestli se opravdu jedná o PID mého volaného příkazu? Moc děkuji
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

21.10.2012 18:17 l4m4
Rozbalit Rozbalit vše Re: Jak kontrolovat PID?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Opravdu čisté řešení bez race conditions IMO v shellu nejde. Nestačí-li ti tedy někdy později jen počkat na dokončení (pokud to ještě nedoběhlo), to umí builtin wait. Nicméně pokud

jobs -p

vypíše dané číslo procesu, tak existuje shell job s tímto pid, což, máš-li nějakou kontrolu na tím, co se ve tvém shellu děje, by mohlo zhruba stačit.
21.10.2012 19:55 luky
Rozbalit Rozbalit vše Re: Jak kontrolovat PID?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Prectete si PID rodice procesu se zkoumanym PID. Musi to byt PID shellu, z ktereho jste ho sputsil.
21.10.2012 20:06 l4m4
Rozbalit Rozbalit vše Re: Jak kontrolovat PID?
Nebo.

Pořád ovšem může proces zhynout mezi tím přečtením a čímkoli, co se na základě něj má stát. Tedy bezpečně lze zjsitit pouze to, že už skončil, ne to, že ještě běží.
23.10.2012 15:53 luky
Rozbalit Rozbalit vše Re: Jak kontrolovat PID?
Na to se ale tazatel neptal ;-) Pokud chce neco provadet, nez proces skonci, muze si odblokovat signal SIGCHILD. Ten bude dorucen pri pristim vstupu rodicovskeho procesu do kernelu a protoze vsechny akce, kterymi se daji ovlivnit ostatni procesy (krome dat ve sdilene pameti), vyzaduji vstup do kernelu, je toto reseni bezpecne.
22.10.2012 10:35 camel1cz | skóre: 25
Rozbalit Rozbalit vše Re: Jak kontrolovat PID?
Odpovědět | | Sbalit | Link | Blokovat | Admin
V debianu bych zkusil znásilnit start-stop-daemon(8) - parametr -m vytváří PID file správným způsobem...
22.10.2012 11:25 camel1cz | skóre: 25
Rozbalit Rozbalit vše Re: Jak kontrolovat PID?
Teď mi došlo jak zněla původní otázka - co třeba:

ps -p $PID

...pokud je nutné řešít možné přetočení PIDů (pouze u hodně živých serverů nebo dlouho běžících procesů), tak mě napadá jedině kontrola dalších atributů procesu (jméno binárky, čas spuštění, ...) např. přes parametr -o (command,start) zmiňovaného ps(1)

Jendа avatar 22.10.2012 11:46 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: Jak kontrolovat PID?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nestačil by wait?
Josef Kufner avatar 22.10.2012 13:17 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Jak kontrolovat PID?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Koukni na wait, mohl by stačit. Kontrola PID rodičovského procesu je dobrý nápad.

Možná bys ale nemusel spouštět mysqldump na pozadí. Co tam máš okolo?
Hello world ! Segmentation fault (core dumped)
22.10.2012 16:48 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: Jak kontrolovat PID?
Odpovědět | | Sbalit | Link | Blokovat | Admin
ak to nie je kriticka uloha, tak mozes kontrolovat nazov procesu a jeho pid. Sanca, ze dalsi proces toho isteho typu dostane zase to iste pid a ty si medzitym nevsimnes, ze 1. skoncil je vcelku mala.
If you hold a Unix shell up to your ear, you can you hear the C.
23.10.2012 16:13 luky
Rozbalit Rozbalit vše Re: Jak kontrolovat PID?
Sanca, ze dalsi proces toho isteho typu dostane zase to iste pid a ty si medzitym nevsimnes, ze 1. skoncil je vcelku mala.
A pokud tu sanci vycislime, tak je 0 protoze system nikdy nesmi recyklovat PID, dokud si neprectete navratovou hodnotu procesu, pokud neni SIG_CHLD nastaven na SIG_IGN!
23.10.2012 23:50 l4m4
Rozbalit Rozbalit vše Re: Jak kontrolovat PID?
Zrovna od shellu se těžko dá čekat, že by to nedělal.
24.10.2012 12:36 luky
Rozbalit Rozbalit vše Re: Jak kontrolovat PID?
Zrovna od shellu se těžko dá čekat, že by to nedělal.
Opravdu jste si precetl muj prispevek cely?

pokud neni SIG_CHLD nastaven na SIG_IGN

toto samozrejme muzete v shellu ovlivnit
stativ avatar 22.10.2012 17:15 stativ | skóre: 54 | blog: SlaNé roury
Rozbalit Rozbalit vše Re: Jak kontrolovat PID?
Odpovědět | | Sbalit | Link | Blokovat | Admin
pidof na binárku a porovnat výsledek s uloženým PID?
Ať sežeru elfa i s chlupama!!! ljirkovsky.wordpress.com stativ.tk
23.10.2012 14:29 marbu | skóre: 31 | blog: hromada | Brno
Rozbalit Rozbalit vše Re: Jak kontrolovat PID?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Jeste by se to dalo resit pomoci cgroups, ty jeste nikdo nezminoval ;)
There is no point in being so cool in a cold world.
24.10.2012 08:35 Radek
Rozbalit Rozbalit vše Re: Jak kontrolovat PID?
Odpovědět | | Sbalit | Link | Blokovat | Admin
muzes si na to napsat skript? a jenom skript poustet na pozadi ktery muze nastavovat nejakou promenou nebo vytvaret nejaky tmp soubor nevim jestli je jde vytvorit promenou v rodicovskem bashi

mysqldump ... & VAR = $! fg $var

nastaveni promene nebo vytroverni souboru

24.10.2012 09:42 Ja
Rozbalit Rozbalit vše Re: Jak kontrolovat PID?
Odpovědět | | Sbalit | Link | Blokovat | Admin
A co třeba rovnou { mysqldump; touch dump.done; } &

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.