PHP-script getötet wird ohne Erklärung
Fange ich in meinem php-Skript in der folgenden Art und Weise:
bash
cd 'path'
php -f 'scriptname'.php
Gibt es keine Ausgabe, während das php-script ausgeführt wird.
Nach einer Zeit, das php-Skript antwortet mit:
Killed
Meine Idee ist, dass es erreicht das memory_limit: ini_set('memory_limit', '40960M');
Erhöhung des memory limit schien das problem zu lösen, aber es nahm nur am Rande.
Was bedeutet, dass Killed
Satz bedeuten?
- putty Sitzung und alle Ihre Laufenden Prozess getötet wird, wenn die shell beendet. verwenden
nohup
vor dem Befehl - Nur die Terminologie vielleicht, aber zum besseren Verständnis: putty ist nur die Sache, die können Sie öffnen Sie ein
SSH
- Sitzung an Ihrem server. Es ist wirklich unwahrscheinlich, dass der Kitt ist, tötet Ihr Prozess. Sie sind in einer Sitzung, und was killes, die Ihren Prozess. Und Sie sehen es in der session (putty macht das session). - Sehen alle nohup Antworten: Ihre Sitzung noch ausgeführt wird, richtig? Sie können nur tun, ein 'ls' nach dem Sie "getötet"? Wenn dem so ist, diese Antwort wird wahrscheinlich nicht helfen...
- lustigerweise habe ich wirklich versucht es auch so, dass ich nicht geschlossen die Sitzung, ohne Erfolg...
- Ja, ich weiß, dass es nur verbindet mich mit unserem server, aber es ist nichts auf dem server, sobald ich weiß, was töten könnte meinen Prozess...
- prüfen Sie, ob Ihr Skript ist auf maximum execution time php.net/manual/en/function.set-time-limit.php
- das würde nicht senden "getötet", sondern ein Fehler.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihren Prozess getötet wird. Es könnte eine Vielzahl von Gründen, aber es ist einfach zu verwerfen einige der mehr offensichtlich.
&
ZeugWenn Ihr server ist hungrig nach Ressourcen (kein Speicher, kein swap), der kernel kann töten Ihren Prozess. Dies ist wahrscheinlich das, was passiert.
In anycase: Ihr Prozess ist immer ein signal senden, dass es aufhören sollte. Normalerweise nur ein paar 'Dinge' können dies tun,
Referenzen: Wer "Getötet" meine Prozess-und warum?
top
undfree
überprüfen Sie Ihre server-Status, obwohl die komplette run-trought dieser könnte etwas jenseits der Anwendungsbereich dieser Frage. Versuchen Sie, bis Sie in der manpage.Sie könnte der Speicher in der PHP-Skript. Hier ist, wie zu reproduzieren, der Fehler:
Mache ich in diesem Beispiel auf Ubuntu 12.10 mit PHP 5.3.10:
Erstellen dieses PHP-Skript aufgerufen
m.php
und speichern:Ausführen:
Nimmt das Programm 100% CPU für etwa 15 Sekunden, dann Stoppt. Blick auf
dmesg | grep php
und es gibt Hinweise:So, in meinem Fall, das PHP-Programm gedruckt "Getötet" und gestoppt, weil es lief out of memory durch eine unendliche Schleife.
Lösungen:
Killed
ist, was bash sagt, wenn ein Prozess beendet wird, nachdem ein SIGKILL, es nicht mit putty.Terminated
ist, was bash sagt, wenn ein Prozess beendet sich nach ein SIGTERM.Sie nicht mit in PHP limits, Sie können ausgeführt werden, in ein anderes problem, siehe:
Rückgabewert, wenn OOM-killer killt einen Prozess
pcntl
- Funktionen.memory_get_peak_usage()
könnte auch nützlich. Ich glaube nicht, dass PHP genug signal support findest du details einer empfangenen Signals.http://en.wikipedia.org/wiki/Nohup
Versuchen Sie es mit nohup vor Ihrem Befehl.
nohup fängt das hangup-signal, während das kaufmännische und-Zeichen nicht (außer die Schale ist confgured, dass so oder nicht senden von SIGHUP an alle).
Normalerweise, wenn Sie einen Befehl mit & und die shell zu beenden danach die shell beenden der sub-Befehl mit dem hangup-signal (kill-SIGHUP ). Dies kann verhindert werden mit nohup, wie es fängt das signal und ignoriert es, so dass es erreicht nie die tatsächliche Anwendung.
Fall, dass Sie bash verwenden, können Sie den Befehl shopt | grep hupon, um herauszufinden, ob Ihre shell sendet SIGHUP an seine Kind-Prozesse oder nicht. Wenn es deaktiviert ist, werden die Prozesse nicht beendet, da es scheint der Fall zu sein für Sie.
Gibt es Fälle, wo nohup funktioniert nicht, zum Beispiel, wenn Sie den Prozess starten Sie erneut den NOHUP-signal.
Wenn Sie bereits die Pflege von php.ini-Einstellungen, die im Zusammenhang mit script-Speicher-und Zeitlimit, dann kann seine linux-ssh-Verbindung beenden in der aktiven Sitzung oder einem Ding wie das.
Können Sie 'nohup' linux-Befehl einen Befehl ausführen, der immun gegen Hänger
Bearbeiten:- Sie können schließen Sie Ihre Sitzung durch das hinzufügen von '&' am Ende des Befehls:-
'&' Betreiber am Ende des comand in linux verschieben, dass der Befehl im hintergrund