_
toggle menu eXmatrikulationsamt.de
online: 344 gäste
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
post 07 Aug 2009, 13:43
avatar
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
ProfilPM
AntwortenZitierenTOP
post 07 Aug 2009, 13:48
avatar
1. Schein
*

Punkte: 41
seit: 14.01.2006

und dirty vllt noch

CODE

$ ps -A | grep 10165
 10165 ?        00:00:00 sshd
ProfilPM
AntwortenZitierenTOP
post 07 Aug 2009, 13:50
avatar
Are you afraid?
********

Punkte: 1648
seit: 11.10.2007

Zitat(Socres @ 07 Aug 2009, 13:34)
wieso?!?!?!
*


Wem gehoert denn der Prozess?


--------------------
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 07 Aug 2009, 19:18
avatar
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.php

dann musst du dein php aber umkonfigurieren. http://www.php.net/manual/en/pcntl.installation.php

Dieser 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--
ProfilPM
AntwortenZitierenTOP
post 07 Aug 2009, 19:45
avatar
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.
ProfilPM
AntwortenZitierenTOP
post 08 Aug 2009, 04:25
avatar
Voll Laser
*******

Punkte: 1430
seit: 21.08.2008

Jaja KEIN BASHBEFEHLKLUGSCHEISSMARX (man fürht doch das Programm meistens in der Bash aus oder?) . wenn man einen webserver hat der nur intern erreichbar ist ist das mit den Rechten kein problem. Man muss ja dem Webserver auch nicht gleich Rootrechte geben. Wie gesagt mit der beschriebenen Methode funktionierts.

Dieser Beitrag wurde von I.I: 08 Aug 2009, 04:30 bearbeitet
ProfilPM
AntwortenZitierenTOP
post 08 Aug 2009, 04:53

Avatar-Untertitel
*******

Punkte: 1459
seit: 03.04.2006

Ich persönlich finde ja ohnehin, dass ihr alle keine Ahnung habt, aber macht ja nix:
root@flunder:~# /bin/kill
Usage:
kill pid ... Send SIGTERM to every process listed.
kill signal pid ... Send a signal to every process listed.
kill -s signal pid ... Send a signal to every process listed.
kill -l List all signal names.
kill -L List all signal names in a nice table.
kill -l signal Convert between signal numbers and names.
root@flunder:~# kill
kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]
root@flunder:~# sh
# kill
kill: 1: Usage: kill [-s sigspec | -signum | -sigspec] [pid | job]... or
kill -l [exitstatus]
#

Asklar?


--------------------
Gebrauchte, geprüfte SATA/IDE (500GB, 160GB, 120GB) Festplatten? --> https://www.exmatrikulationsamt.de/6058033
ProfilPM
AntwortenZitierenTOP
post 08 Aug 2009, 10:20
avatar
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


--------------------
flickr
Und wenn sie kommt, fährt sie an uns vorbei
-RaT-
ProfilPM
AntwortenZitierenTOP
post 08 Aug 2009, 13:36
avatar
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.
ProfilPM
AntwortenZitierenTOP
post 08 Aug 2009, 14:25
avatar
dLikP
*******

Punkte: 1497
seit: 06.10.2006

Zitat(I.I @ 08 Aug 2009, 13:36)
du nicht ich schon
*

Fakt ist, es hat mit der Bash nix zu tun (Deine Getränkekisten "Audi-Kisten" zu nennen weil du die immer mitm Audi holst ist in etwa genauso sinnvoll wie zu sagen "kill ist'n Bash-Programm" weil du es aus immer aus der Bash heraus startest). Mag sein, dass du das klugscheisserisch nennst, weil du nicht zugeben kannst, wenn du falsch liegst, aber das ist eher dein persönliches Problem.

Dieser Beitrag wurde von Polygon: 08 Aug 2009, 14:30 bearbeitet
ProfilPM
AntwortenZitierenTOP
post 08 Aug 2009, 14:34

Avatar-Untertitel
*******

Punkte: 1459
seit: 03.04.2006

Ich bitte darum zu beobachten, dass es sehrwohl den `bash Befehl' `kill' gibt - nämlich als builtin. Weiterhin gibt es aber auch das ausführbare Programm `/bin/kill'. Und zu allem Überfluss führt system gemäß Manual /bin/sh -c "<cmd>" aus, was bedeutet: Auf Lignix mit Link von /bin/sh auf /bin/bash wird die bash ausgeführt (und somit das builtin). Auf Lignix (wie z.B. bei Ubuntu) wird `sh' (Ubuntu: dash) ausgeführt die eine zur Bourne shell kompatible Variante von /bin/sh ist. dash hat aber, wie man aus meinem posting mit wenig Cleverness entnehmen kann, ebenfalls ein builtin für kill (daher auch das andere Erscheinen der `Usage'). Man kann demnach bei der Verwendung eines standardmäßigen Ubuntu durchaus von einem `dash Befehl' sprechen.

Alles klar?

Im Übrigen ist dieser ganze Thread bereits seit dem posting von `seb' Firlefanz. Es dürfte unter Linux am praktikabelsten sein /proc/<pid>/* zu verwenden.

Ciao Kiddos!
ProfilPM
AntwortenZitierenTOP
post 08 Aug 2009, 15:36
avatar
Are you afraid?
********

Punkte: 1648
seit: 11.10.2007

Zitat(I.I @ 08 Aug 2009, 04:25)
Jaja KEIN BASHBEFEHLKLUGSCHEISSMARX (man fürht doch das Programm meistens in der Bash aus oder?) .
*


Herzlichen Glueckwunsch, du hast den wichtigsten Teil des Beitrags identifiziert.
ProfilPM
AntwortenZitierenTOP
post 08 Aug 2009, 15:41
avatar
Einfach umwerfend
*********

Punkte: 2458
seit: 13.02.2006

pgrep?


--------------------
ProfilPM
AntwortenZitierenTOP
post 08 Aug 2009, 15:44
avatar
Are you afraid?
********

Punkte: 1648
seit: 11.10.2007

Die Tatsache, dass man kill(2) _direkt_ aufrufen kann, und da nicht erst noch eine Shell starten muss, die das dann erledigt?
ProfilPM
AntwortenZitierenTOP
1 Nutzer liest/lesen dieses Thema (1 Gäste)
0 Mitglieder: