php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger

PHP Einsteiger PHP Problemlösungen für Spracheinsteiger
Archive: 2004, 2004/2, 2005, 2005/2, 2006, 2007, 2008, 2009, 2010,

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 13.12.2011, 13:24  
Neuer Benutzer
 
Registriert seit: 30.06.2008
Beiträge: 10
ottixus befindet sich auf einem aufstrebenden Ast
Standard proc_open - Programm im Hintergrund starten und PID auslesen

Hallo,

ich möchte ein Programm im Hintergrund mit proc_open starten und danach die Prozeß-ID des gerade gestarteten Programmes auslesen. Das Starten des externen Programmes im Hintegrund habe ich hinbekommen. Allerdings bekomme ich leider nicht die richtige PID anzeigt. Ich vermute, dass es sich bei der angezeigten PID um eine Sub-Shell handelt, die gestartet wird, um das eigentliche Programm zu starten ( Die PID war immer um eins niedriger als die Richtige). Das Programm soll unter Linux laufen.

Um das Programm zu starten benutze ich folgenden Code

PHP-Code:
$strExecProg 'exec ' SYSRELIAPROGPATH ' -f ' $inputfilepath ' -o ' $outputfilepath ' -l ' $logfilepath ' &';
                
//$html .= $strExecProg . '<br>';
                
                
$descriptorspec = array(
                   
=> array("pipe""r"),  // stdin is a pipe that the child will read from
                   
=> array("file"PROGCALLLOGPATH"a"),  // stdout is a pipe that the child will write to
                   
=> array("file"ERRORLOGPATH"a"// stderr is a file to write to
                
);
                
                
$cwd NULL;
                
$env NULL;
                
                
$process proc_open($strExecProg$descriptorspec$pipes$cwd$env);
                
                if (
is_resource($process)) {
                    
// $pipes now looks like this:
                    // 0 => writeable handle connected to child stdin
                    // 1 => readable handle connected to child stdout
                    // Any error output will be appended to /tmp/error-output.txt
                
                    
fclose($pipes[0]);
                    
                    
$actProgStatus proc_get_status($process);
                    
                    
$html .= 'PID: ' $actProgStatus["pid"] . '<br>';
                
                
                    
// It is important that you close any pipes before calling
                    // proc_close in order to avoid a deadlock
                    
$return_value proc_close($process);
                
                    echo 
"command returned $return_value\n";
                } 
Auf der englischen PHP-Handbuchseite von prog_open steht der Hinweis vor dem zu startenden Befehl "exec" davor zu schreiben, damit die richtige PID angezeigt wird. Dies hat bei mir aber leider keinen Erfolg.


Weiß jemand von Euch wie es Richtig sein muss?

Viele Grüße,

ottixus
ottixus ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 13.12.2011, 14:33  
Erfahrener Benutzer
 
Benutzerbild von lstegelitz
 
Registriert seit: 07.09.2009
Beiträge: 4.005
PHP-Kenntnisse:
Fortgeschritten
lstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nett
Standard

Zitat:
Ich vermute, dass es sich bei der angezeigten PID um eine Sub-Shell handelt, die gestartet wird, um das eigentliche Programm zu starten
Schon mal den bypass_shell Parameter ausprobiert, ob es dann die richtige PID ist?

Zitat:
Auf der englischen PHP-Handbuchseite von prog_open steht der Hinweis vor dem zu startenden Befehl "exec" davor zu schreiben, damit die richtige PID angezeigt wird. Dies hat bei mir aber leider keinen Erfolg.
Den Hinweis finde ich nirgends... wo soll das stehen?
__________________
Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.
lstegelitz ist offline   Mit Zitat antworten
Alt 15.12.2011, 08:40  
Neuer Benutzer
 
Registriert seit: 30.06.2008
Beiträge: 10
ottixus befindet sich auf einem aufstrebenden Ast
Standard

Laut php-Handbuch gibt es die bypass_shell-Option nur unter Windows (http://de3.php.net/manual/en/function.proc-open.php). Hab die Option trotzdem mal unter Linux ausprobiert. Es gibt zwar keine Fehlermeldung, die richtige PID wird aber trotzdem nicht ausgegeben.

Der Hinweis mit dem "exec" stammt nicht von der prop_open-Beschreibung, sondern von der Routine proc_get_status (http://de2.php.net/manual/en/functio...get-status.php ; s. Beitrag von Mark Seecof 7.9.2009). Im meinem letzten Beitrag habe ich leider auf die falsche Seite verwiesen.
ottixus ist offline   Mit Zitat antworten
Alt 12.05.2012, 19:41  
Neuer Benutzer
 
Registriert seit: 30.06.2008
Beiträge: 10
ottixus befindet sich auf einem aufstrebenden Ast
Standard

Ich habe das Problem jetzt damit umgangen, dass ich später mittels dem Linux-Befehl pgrep nach Prozessen suche, die die gleichen Aufrufparameter haben, wie das Programm, dass ich gerade mittels exec gestartet habe. Das Problem dabei ist, dass pgrep theoretisch mehrere Instanzen des gleichen Programmes finden könnte, die mit den gleichen Eingabeparametern aufgerufen wurden. So ganz sauber ist diese Lösung also noch nicht.
ottixus ist offline   Mit Zitat antworten
Alt 14.05.2012, 03:43  
Erfahrener Benutzer
 
Registriert seit: 17.07.2009
Beiträge: 223
PHP-Kenntnisse:
Fortgeschritten
Tiberius zeigte ein beschämendes Verhalten in der Vergangenheit
Tiberius eine Nachricht über ICQ schicken
Standard

Wie wäre es wenn child seine pid(getmypid oder posix_getpid) per pipe oder shmop selbst an parent mitteilt? Das Ding mit pgrep klingt mehr als gruselig
Tiberius ist offline   Mit Zitat antworten
Alt 14.05.2012, 10:33  
Erfahrener Benutzer
 
Benutzerbild von Dark Guardian
 
Registriert seit: 10.10.2009
Beiträge: 2.630
PHP-Kenntnisse:
Fortgeschritten
Dark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekannt
Standard

Auf Linuxsystemen verwende ich gerne pcntl_fork() anstatt proc_open().
__________________
"Alles im Universum funktioniert, wenn du nur weißt wie du es anwenden musst".
Dark Guardian ist offline   Mit Zitat antworten
Alt 14.05.2012, 10:50  
Erfahrener Benutzer
 
Registriert seit: 21.12.2004
Beiträge: 5.234
PHP-Kenntnisse:
Fortgeschritten
mepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblick
mepeisen eine Nachricht über ICQ schicken mepeisen eine Nachricht über Skype™ schicken
Standard

Zitat:
Zitat von Dark Guardian Beitrag anzeigen
Auf Linuxsystemen verwende ich gerne pcntl_fork() anstatt proc_open().
Du bist dir über die technischen Unterschiede beider Varianten schon im Klaren?
__________________
www.php-maven.org PHP und Maven vereint: Build/Deploy/Produktion/Konfiguration, Projekt Management, CI, PHPUnit, zahlreiche Frameworks
Twitter @ https://twitter.com/#!/mepeisen und Facebook @ http://t.co/DZnKSUih
mepeisen ist offline   Mit Zitat antworten
Alt 14.05.2012, 11:34  
Erfahrener Benutzer
 
Benutzerbild von Dark Guardian
 
Registriert seit: 10.10.2009
Beiträge: 2.630
PHP-Kenntnisse:
Fortgeschritten
Dark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekannt
Standard

Zitat:
Zitat von mepeisen Beitrag anzeigen
Du bist dir über die technischen Unterschiede beider Varianten schon im Klaren?
Jap. Und jetzt geht mir gerade auf das der TE ja ein Programm starten will was nicht notwendigerweiße ein Ableger PHP Script sein muss.

Verzeihung, my fault.
__________________
"Alles im Universum funktioniert, wenn du nur weißt wie du es anwenden musst".
Dark Guardian ist offline   Mit Zitat antworten
Alt 14.05.2012, 11:40  
Erfahrener Benutzer
 
Registriert seit: 21.12.2004
Beiträge: 5.234
PHP-Kenntnisse:
Fortgeschritten
mepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblick
mepeisen eine Nachricht über ICQ schicken mepeisen eine Nachricht über Skype™ schicken
Standard

Zitat:
Zitat von Dark Guardian Beitrag anzeigen
Jap. Und jetzt geht mir gerade auf das der TE ja ein Programm starten will was nicht notwendigerweiße ein Ableger PHP Script sein muss.

Verzeihung, my fault.
Ebend drum. Aber da du es selbst bemerkt hast
__________________
www.php-maven.org PHP und Maven vereint: Build/Deploy/Produktion/Konfiguration, Projekt Management, CI, PHPUnit, zahlreiche Frameworks
Twitter @ https://twitter.com/#!/mepeisen und Facebook @ http://t.co/DZnKSUih
mepeisen ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Programm starten Shelter PHP Einsteiger 1 12.07.2011 21:50
Shell Command durch PHP im Hintergrund starten parkourpenner PHP-Fortgeschrittene 1 30.08.2010 20:26
mp3 Daten auslesen und starten Fortmann PHP Tipps 2010 9 04.07.2010 18:30
Linux Programm starten und PID speichern? Bubelbub PHP Tipps 2010 5 27.02.2010 20:51
Externes Programm starten Spiff PHP Tipps 2006 5 26.10.2009 16:05
[Erledigt] Programm im hintergrund FreddyS Server, Hosting und Workstations 3 09.10.2009 18:58
EXE nicht im Hintergrund ausführen? DaniGro Server, Hosting und Workstations 6 16.10.2006 20:57
Programm mit PHP starten. PHP Tipps 2005-2 12 10.10.2005 16:40
Programm starten und sich selbst beenden. DerDesian PHP Tipps 2005-2 0 20.09.2005 12:32
per PHP Programm starten McWolle PHP Tipps 2005 4 29.03.2005 22:36
PHP & Perl: Aus Perlprogramm ein PHP Programm starten (l PHP-Fortgeschrittene 2 20.11.2004 02:31

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
proc_open, proc_open tutorial, programm im hintergrund starten php, pid auslesen, php pid auslesen, php programmaufruf prozessid, php proc_open, linux pid vom startenden, linux php daemon, perl stdout stderr child pipe verarbeiten, pid abfragen, php com process id, shell pid eines programms, linux pid beim start auslesen, proc_open program start, prozess id welches programm?, php im hintergrund starten, handle eines gerade gestarteten programmes, linux bash prozss im hintergrund starten prozess id, php proc open deadlock

Alle Zeitangaben in WEZ +2. Es ist jetzt 16:38 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum