|
php/bash prozess überwachen s geht ni :(
|
|
 07 Aug 2009, 13:34
|

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  achja und proc_get_status() funzt ja nur mit prozessen die php gestartet hat, also mit proc_open()
|
|
|
Antworten(1 - 14)
|
|
 07 Aug 2009, 13:43
|

Flunkyballmeister 2010       
Punkte: 1415
seit: 26.11.2003
|
Zitat(Socres @ 07 Aug 2009, 13:34) 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);
wenn du die pid hast kannste schauen ob es /proc/$pid gibt 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
|
|
|
|
|
 07 Aug 2009, 13:48
|

1. Schein 
Punkte: 41
seit: 14.01.2006
|
und dirty vllt noch CODE $ ps -A | grep 10165 10165 ? 00:00:00 sshd
|
|
|
|
|
 07 Aug 2009, 19:18
|

Voll Laser       
Punkte: 1430
seit: 21.08.2008
|
Der tollste bash befehl ist "lsof". Damit kann man alles machen :-). Und in php nicht "system" benutzen. Das checkt den exit code nicht richtig. Du musst proc_open benutzen. Also PHP startet Kindprozess (lsof oder ps oder kill) und bekommt vom Kindproezss dann den exitstatus zurück den kannst du dann auslesen und je nachdem was du zurück bekommst weißt du ob der andere prozess an ist. Der webserver (wenn das phpskript über den Webserver gestartet werden soll) sollte natürlich zugriffsrechte auf die zu wünschenden bashbefehle haben in dem man ihn entsprechend konfiguriert (also als welcher user er laufen soll und welcher Gruppe er angehört). Ich hab selber schon einmal sowas gebastelt und es hat funktioniert. Ansonsten gibts noch http://php.net/manual/en/book.pcntl.phpdann musst du dein php aber umkonfigurieren. http://www.php.net/manual/en/pcntl.installation.phpDieser Beitrag wurde von I.I: 07 Aug 2009, 19:19 bearbeitet
--------------------
Verein: USV TU Dresden
--Film Fan-- --Poker Fan-- --Billard Fan-- --Schach Fan-- --Fußball Fan-- --Rennrad Fan-- --Triathlon Fan-- --Volleyball Fan--
--Luiz Bonfa Fan-- --Eliane Elias Fan-- --Scott Joplin Fan-- --The Beatles Fan-- --Woody Allen Fan-- --Bodo Wartke Fan-- --Joao Gilberto Fan-- --Monty Python Fan-- --Volker Pispers Fan-- --Ennio Morricone Fan-- --Alfred Hitchcock Fan-- --Georg Schramm Fan-- --Kool & The Gang Fan-- --Earth, Wind & Fire Fan--
--V for Vendetta Fan-- --Das Leben des Brian Fan-- --Jackie Brown Soundtrack Fan--
|
|
|
|
|
 07 Aug 2009, 19:45
|

Are you afraid?        
Punkte: 1648
seit: 11.10.2007
|
lsof ist genauso ein „bash befehl“ wie kill, naemlich gar nicht. Der korrekte Weg geht auch nicht ueber pcntl, sondern ueber posix_kill, das macht den Syscall direkt und spart sich diesen ganzen Shell-Umweg-Wix. Den Rueckgabewert kriegt man dann mit posix_get_last_error, kill(2) ist dein Freund. Bringen tut das aber auch nichts, weil man fuer alle interessanten Prozesse (naemlich alle die, deren echte UID, die nicht mit den echten oder effektiven UIDs des Webservers laeuft) EPERM bekommt: CODE mmarx@korenchkin (1487) ~ % id uid=1000(mmarx) gid=1000(mmarx) groups=20(dialout),24(cdrom),25(floppy),29(audio),44(video),46(plugdev),109(kvm),1000(mmarx),1001(wheel) mmarx@korenchkin (1488) ~ % ps -U root | tail -n1 29450 ? 00:00:00 logger mmarx@korenchkin (1489) ~ % strace kill -0 29450 2>&1 | grep '^kill(' kill(29450, SIG_0) = -1 EPERM (Operation not permitted) mmarx@korenchkin (1490) ~ % Unter Linux koennte man mit capabilities (CAP_KILL) darum kommen, muss man aber schon _tierisch_ bescheurt sein, um so etwas einem Webserver anzuvertrauen. Gleiches gilt fuer Webserver mit Nutzer- oder gar root-Rechten. Wer auf Schmerzen steht (gar nicht mal so abwegig, immerhin geht es um PHP), kann suPHP nehmen.
|
|
|
|
|
 08 Aug 2009, 10:20
|

dLikP       
Punkte: 1497
seit: 06.10.2006
|
Zitat(I.I @ 08 Aug 2009, 04:25) (man fürht doch das Programm meistens in der Bash aus oder?)  Nein
--------------------
flickrUnd wenn sie kommt, fährt sie an uns vorbei -RaT-
|
|
|
|
|
 08 Aug 2009, 13:36
|

Voll Laser       
Punkte: 1430
seit: 21.08.2008
|
Zitat(Polygon @ 08 Aug 2009, 10:20) Nein  du nicht ich schon @aktsizr was soll das denn? War doch hier nicht gefragt wie kill funktioniert.
|
|
|
1 Nutzer liest/lesen dieses Thema (1 Gäste)
0 Mitglieder:
|