Programm im Hintergrund laufen lassen

Lumio

Lumio

Tripel-As
Hallo! Vor langem ist das einmal ein Thema gewesen, weiss aber gerade nicht genau, nach was ich suchen soll.
Und zwar möchte ich im Hintergrund ein PHP-Programm laufen lassen. Irgendwann kam mir "screen" in den Kopf, aber ich bin mir nicht sicher.
 
Gibt aber auch noch wesentlich simplere Möglichkeiten.

Code:
$php-programm &

Code:
man bg
 
nohup und screen haben den Vorteil, dass man sich ausloggen kann, die Kommandos aber weiter laufen.
 
Genau das brauch ich. Einen Prozess in den Hintergrund schieben bringt mir da wenig.

Auch wenns jetz weniger dazu passt:
Kann ich irgendwie eine Art Wiedererkennung für dieses PHP-Programm machen? Weil der Befehl php -f datei.php lässt bei den Prozessen nur ein weiteres php auftauchen.
 
Kann ich irgendwie eine Art Wiedererkennung für dieses PHP-Programm machen? Weil der Befehl php -f datei.php lässt bei den Prozessen nur ein weiteres php auftauchen.
Meinst Du vielleicht, die PID, d.h., die Prozess-Nummer? Unter bash ist die pid des zuletzt gestarteten Befehls in der Variablen "$!". Wenn Du also Dein Program mit 'php -f datei.php' startest, machst Du am besten folgendes:
Code:
php -f datei.php & echo $! > myphp.pid
Das gilt zumindest fuer die bash. Dann ist in der Datei myphp.pid die PID des Prozesses abgespeichert. Unter /proc/$(cat myphp.pid) findest Du dann alle moeglichen Informationen zu diesem Prozess.
 
Okay... kann ich das auch mit nohup machen?
also dann halt
Code:
nohup php -f datei.php & echo $! > myphp.pid
Ich trau mich das nämlich noch nicht testen :D
 
Darf ich mal kurz zwischenfragen, wozu 'echo $! > myphp.pid' dient? Nach einem '&' wird doch sowieso die pid ausgegeben, auch wenn man nohup voranstellt.

Code:
kalle@hoppers:~> nohup konqueror &
[1] 6689

Kapier ich jetzt nicht so ganz.
 
Allerdings nicht auf stdout. Und auch nicht auf stderr. Wie man das in eine Datei umleiten könnte, wüsste ich grad nicht. (Und diese "visuelle Benachrichtigung" nützt einem in nem Script (welches normalerweise mit keiner tty verbunden ist) herzlich wenig.)
 
(Und diese "visuelle Benachrichtigung" nützt einem in nem Script (welches normalerweise mit keiner tty verbunden ist) herzlich wenig.)

Das war der springende Punkt, danke. Nur kam die Idee, das ganze in ein Skript zu packen, ja erst nach dem 'echo' Zusatz - wirkt halt etwas abstrakt, wenn man z.B. noch nie mit php zu tun hatte oder die Nacht davor nicht geschlafen hat.

Weitermachen, please.
 
Hey, hab hier ein kleines Problem. Ich hab erwartet, dass wenn ich jetzt einmal
Code:
nohup php -f datei.php
mach, dass alles klappt, aber tut es nicht.
nohup bleibt aktiv, solange auch das php-script aktiv ist. Genauso wie bei screen. Wie kann ich das ändern?
 
nohup musst du in den Hintergrund schicken und screen detachen.
nohup macht ja nix anderes als das hangup-signal "aufzufressen". Deswegen bleibt der Hintergrund-Job auch nach dem logout aktiv, aber in den Hintergrund schicken musst du es schon.
Code:
$ nohup php -f datei.php &
Wenn du screen benutzt musst du den Befehl in screen absetzen und die session via ctrl-a d detachen.
 
Ah danke :) ich hab dann immer Ctrl+C gedrückt :)
.
.
.
EDIT (autom. Beitragszusammenführung) :
.

Sorry... ein Problem hab ich noch:
Und zwar möcht ich via PHP selber dann auch noch einen Prozess starten, der aber unabhängig vom PHP-Script laufen soll. Wie mach ich das? Das kann ich ja nicht genauso machen wie im Bash.
 
Zuletzt bearbeitet:
fork()-exec() Kombi?
Ansonsten solltest du auch sowas wie "system('nohup ./programm &')" machen können. Probier halt ein wenig rum.
 
also system('nohup...') funkt nicht... aber ich teste das gerade auf meinem Mac unter OS X - das einzige was passiert: php stürzt ab ^^

Ich probiers später mit pcntl_fork() - mal schaun, was sich da tut :)
 
nohup ist glaub ich nichtmal nötig. Ich dachte eventuell schicken das die parent-Prozesse an ihre Kinder beim exitus.
Code:
$ cat idle.pl 
#!/usr/bin/env perl
for (;;) {}

$ cat forkexec.pl 
#!/usr/bin/env perl
use strict;
use warnings;

system "./idle.pl &";

if (fork == 0) {
    # child
    exec "./idle.pl";
}

exit;

$ ./forkexec.pl
$ ps -ef|grep idle
user    6595     1 44 18:14 pts/3    00:00:01 perl ./idle.pl
user    6596     1 45 18:14 pts/3    00:00:01 perl ./idle.pl
user    6598  6577  0 18:14 pts/3    00:00:00 grep --color=auto idle
Die Prozesse bleiben auch nach logout aktiv.
Warum php dabei abstürzt ist mir ein Mysterium.
(Läuft das php-Skript denn "standalone" oder auf nem Webserver?)
 
Eigentlich soll es standalone laufen, aber zur zeit teste ich es noch teilweise mit dem webserver.
.
.
.
EDIT (autom. Beitragszusammenführung) :
.

Ok... ich bin draufgekommen, dass ich php neu kompilieren müsste, um fork verwenden zu können.
 
Zuletzt bearbeitet:

Ähnliche Themen

Execute in Terminal - Meldungen anzeigen

Keine grafische Oberfläche (Debian Installation)

Welches Linux/Unix für ehemaligen OSX Nutzer?

Unix Webserver mit HTML Seite erstellen

PATH wird nicht richtig durchsucht

Zurück
Oben