_
toggle menu eXmatrikulationsamt.de
online: 368 gäste

> php/bash prozess überwachen s geht ni :(

Themen Layout: Standard · [Linear] · Outline Thema abonnieren | Thema versenden | Thema drucken
post 07 Aug 2009, 13:34
avatar
Herr Dachs
*********

Punkte: 8394
seit: 15.12.2004

also ich will mittels php den status eines prozesses anhand der pid herausbekommen...

die pid habe ich

nun wollte ich mittels
CODE

system('kill -0 '.$pid, $rueckgabe);

den status abfragen
dummerweise liefert mir das immer ne 1 zurück, egal ob der prozess läuft oder nicht...

wieso?!?!?!

kennt jemand eventuell noch andere möglichkeiten mittels php zu prüfen ob ein prozess läuft?

achso in meiner umgebung kann ich die meissten kommandos nicht nutzen (ps, pidof) deswegen will ichs mit kill machen...

ich verstehs nich sad.gif

achja und proc_get_status() funzt ja nur mit prozessen die php gestartet hat, also mit proc_open()
ProfilPM
AntwortenZitierenTOP
 
Antworten(15 - 29)
post 08 Aug 2009, 15:56

Avatar-Untertitel
*******

Punkte: 1459
seit: 03.04.2006

kill is schlecht weil: Was wenn dein Prozess abschmiert und ein neuer mit der PID gestartet wird (Man denke an nicht sequentielle pid Vergabe sondern randomisierte (grsec, f/openbsd usw. haben ja solche optionen... vielleicht mittlerweile sogar Linux...). proc is hip weil: Is in Grenzen portabel. Kein Abgefahrener ioctl() Hassle (Gibts bei Linux überhaupt ioctls mit dem man die pids anfordern kann?). cmdline usw. zum Abgleichen ob das wirklich der Prozessname ist den ich will. Vertretbarer overhead.

p.s.: Ich stimme mmarx aber zu: Subshell ist ultralame und keine Option.

Dieser Beitrag wurde von aktsizr: 08 Aug 2009, 16:00 bearbeitet


--------------------
Gebrauchte, geprüfte SATA/IDE (500GB, 160GB, 120GB) Festplatten? --> https://www.exmatrikulationsamt.de/6058033
ProfilPM
AntwortenZitierenTOP
post 08 Aug 2009, 16:01
avatar
Are you afraid?
********

Punkte: 1648
seit: 11.10.2007

Zitat(mmarx @ 07 Aug 2009, 19:45)
Bringen tut das aber auch nichts, weil […]*


Ist eventuell nicht deutlich genug geworden, dass man /proc nutzen will.


--------------------
In my talons, I shape clay, crafting life forms as I please.
Around me is a burgeoning empire of steel.
From my throne room, lines of power careen into the skies of Earth.
My whims will become lightning bolts that devastate the mounds of humanity.
Out of the chaos, they will run and whimper, praying for me to end their tedious anarchy.
I am drunk with this vision. God: the title suits me well.
ProfilPM
AntwortenZitierenTOP
post 09 Aug 2009, 01:58
avatar
Herr Dachs
*********

Punkte: 8394
seit: 15.12.2004

Also es ging dann doch recht fix. Daß ich immer ne eins zurück bekommen hab is klar, www-data kann den psozess nat nicht anhalten. Ich habs jetzt per ps gemacht, da brauch ich keine recht beachten. Wenn ich jetzt noch die möglichkeit hätte das ganze komplett per php zu machen ohne dazu den prozess mittels php starten z müssen
ProfilPM
AntwortenZitierenTOP
post 09 Aug 2009, 02:08
avatar
Are you afraid?
********

Punkte: 1648
seit: 11.10.2007

CODE
file_exists('/proc/'.$pid)
ProfilPM
AntwortenZitierenTOP
post 10 Aug 2009, 15:15
avatar
Herr Dachs
*********

Punkte: 8394
seit: 15.12.2004

jau aber das file existiert auch schnell ma obwohl der prozess nich läuft
ProfilPM
AntwortenZitierenTOP
post 10 Aug 2009, 15:23
avatar
Flunkyballmeister 2010
*******

Punkte: 1415
seit: 26.11.2003

Zitat(Socres @ 10 Aug 2009, 15:15)
jau aber das file existiert auch schnell ma obwohl der prozess nich läuft
*


bitte wie? maximal kann ein anderer prozess die pid bekommen haben .. aber da hast du etweder ewig gewartet oder wir irre prozesse erzeugt

grüße

Seb


--------------------
There is a theory which states that if ever anybody discovers exactly what the Universe is for and why it is here, it will instantly disappear and be replaced by something even more bizarre and inexplicable. There is another theory which states that this has already happened.
Douglas Adams
ProfilPM
AntwortenZitierenTOP
I.I
post 10 Aug 2009, 15:30
Dieser User ist abgemeldet. Abgemeldet





file_exists:
Die Ergebnisse dieser Funktion werden gecached. Weitere Details erhalten Sie bei clearstatcache().

für file_exists('/proc/'.$pid) muss file_exists doch auch auf /proc/ zugreifen können oder seh ich das falsch? @mmarx

Klar ist das ne einfache elegante variante aber ich frag mich wo das problem ist meine Variante zu benutzen :-).
AntwortenZitierenTOP
post 10 Aug 2009, 15:42
avatar
eXma Poltergeist
*********

Punkte: 6729
seit: 20.10.2004

Zitat(mmarx @ 08 Aug 2009, 15:44)
Die Tatsache, dass man kill(2) _direkt_ aufrufen kann, <problem>und da nicht erst noch eine Shell starten muss, die das dann erledigt</problem>?
*



--------------------
ProfilPM
AntwortenZitierenTOP
post 10 Aug 2009, 15:43

Avatar-Untertitel
*******

Punkte: 1459
seit: 03.04.2006

Zitat(I.I @ 10 Aug 2009, 15:30)
file_exists:
Die Ergebnisse dieser Funktion werden gecached. Weitere Details erhalten Sie bei clearstatcache().

für file_exists('/proc/'.$pid) muss file_exists doch auch auf /proc/ zugreifen können oder seh ich das falsch? @mmarx

Klar ist das ne einfache elegante variante aber ich frag mich wo das problem ist meine Variante zu benutzen :-).
*

FYI:
strace -s512 ps ax
[...]
stat64("/proc/15", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
open("/proc/15/stat", O_RDONLY) = 6
read(6, "15 (ata_aux) S 2 0 0 0 -1 2149621824 0 0 0 0 0 0 0 0 15 -5 1 0 54 0 0 4294967295 0 0 0 0 0 0 0 2147483647 0 3222581877 0 0 17 0 0 0 0 0 0\n"..., 1023) = 138
close(6) = 0
open("/proc/15/status", O_RDONLY) = 6
read(6, "Name:\tata_aux\nState:\tS (sleeping)\nTgid:\t15\nPid:\t15\nPPid:\t2\nTracerPid:\t0\nUid:\t0\t0\t0\t0\nGid:\t0\t0\t0\t0\nFDSize:\t32\nGroups:\t\nThreads:\t1\nSigQ:\t0/8187\nSigPnd:\t0000000000000000\nShdPnd:\t0000000000000000\nSigBlk:\t0000000000000000\nSigIgn:\tffffffffffffffff\nSigCgt:\t0000000000000000\nCapInh:\t0000000000000000\nCapPrm:\tffffffffffffffff\nCapEff:\tfffffffffffffeff\nCapBnd:\tffffffffffffffff\nCpus_allowed:\tffffffff,ffffffff\nCpus_allowed_list:\t0-63\nMems_allowed:\t1\nMems_allowed_list:\t0\nvoluntary_ctxt_switches:\t2\nnonvoluntary_ctxt_switches"..., 1023) = 517
close(6) = 0
open("/proc/15/cmdline", O_RDONLY) = 6
read(6, ""..., 2047) = 0
close(6) = 0
write(1, " 15 ? S< 0:00 [ata_aux]\n"..., 37 15 ? S< 0:00 [ata_aux]
) = 37
[...]

lsof nimmt auch /proc. Darüberhinaus macht lsof (sogar im Vergleich zu ps) eine ganze _MENGE_ mehr overhead (ps == 3 (sh, ps, grep) mal fork/execve - sick - aber lsof dürfte noch irrer sein!). file_exists() und /proc/pid/cmdline sind die sinnvollen wie auch deutlich schnelleren und weniger overhead verursachenden Alternativen.

@seb: Wie bereits erwähnt: Randomisierte PID Erzeugung ist durchaus verbreitet.
ProfilPM
AntwortenZitierenTOP
post 10 Aug 2009, 15:49
avatar
Flunkyballmeister 2010
*******

Punkte: 1415
seit: 26.11.2003

Zitat(aktsizr @ 10 Aug 2009, 15:43)
@seb: Wie bereits erwähnt: Randomisierte PID Erzeugung ist durchaus verbreitet.
*


kommt auf dein system drauf an .. ja .. dennoch is die wahrscheinlichkeit recht gering die gleich nochma zu treffen ..
ProfilPM
AntwortenZitierenTOP
post 10 Aug 2009, 15:50

Avatar-Untertitel
*******

Punkte: 1459
seit: 03.04.2006

Zitat(seb @ 10 Aug 2009, 15:49)
kommt auf dein system drauf an .. ja .. dennoch is die wahrscheinlichkeit recht gering die gleich nochma zu treffen ..
*


"recht gering"...
ProfilPM
AntwortenZitierenTOP
post 10 Aug 2009, 15:56
avatar
Flunkyballmeister 2010
*******

Punkte: 1415
seit: 26.11.2003

durchaus .. ja .. sonst vergleichste halt noch cmdline wenn de weisst wie dein prozess heisst
ProfilPM
AntwortenZitierenTOP
post 10 Aug 2009, 16:23

Avatar-Untertitel
*******

Punkte: 1459
seit: 03.04.2006

Zitat(seb @ 10 Aug 2009, 15:56)
.. sonst vergleichste halt noch cmdline wenn de weisst wie dein prozess heisst
*


I agree!
ProfilPM
AntwortenZitierenTOP
I.I
post 10 Aug 2009, 17:27
Dieser User ist abgemeldet. Abgemeldet





@akt and stormi :-) jaja is ja schon klar ..... mich würde das mit der Shell starten nicht groß stören klar dauert das länger und erzeugt vielleicht overhead aber dafür kann ich bei lsof (oder was auch immer) deutlich mehr Informationen bekommen. Zum Beispiel. Welche Files von welchem prozess geöffnet wurden oder welche Files in Benutzung sind (was man sehr häufig für irgendwelche batches braucht die in bestimmten zeitabständen über einen ordner rennen und darauf aktionen ausführen ... ). Ihr wisst was ich meine. Dafür reicht dann ein /proc/pid nicht mehr.

Außerdem wenn ers mit proc_open macht kann er zum Beispiel falls er die pid nicht hat auch nach dem Namen des prozesses gehen etc. ... Er hat einfach mehr Möglichkeiten. Eventuell brauch ers ja nicht und es reicht ihm so aber wenn mal eine andere Anforderung kommt dann ist er mit der anderen Lösung eben vorbereitet. Wir können ja festhalten das die kleinste gemeinsame Lösung file_exists("/proc/....") ist.

Dieser Beitrag wurde von I.I: 10 Aug 2009, 17:35 bearbeitet
AntwortenZitierenTOP
post 10 Aug 2009, 17:35
avatar
Are you afraid?
********

Punkte: 1648
seit: 11.10.2007

Zitat(I.I @ 10 Aug 2009, 17:27)
Dafür reicht dann ein /proc/pid nicht mehr.
*


Das ist falsch, was meinst du eigentlich, wo lsof seine Daten hernimmt?
ProfilPM
AntwortenZitierenTOP
1 Nutzer liest/lesen dieses Thema (1 Gäste)
0 Mitglieder: