3 Stimmen

Segmentierungsfehler bei Shell-Skripten

Hallo, ich habe ein Shell-Skript, das auf der Grundlage der Rückkehr von PHP-Code ausgeführt werden sollte:

x=1
while [[ "$x" != 5 ]] 
do
  echo "Welcome $x"
  php test.php
  x=$?
done

Und der php-Code

echo "Testdfdf test".PHP_EOL;
exit(4);

Also möchte ich, wenn ich 5 von php erhalte, die Schleife beenden.

Aber ich verstehe manchmal:

./myshell: line 7: 20529 Segmentation fault      php test.php

Sollte die Schleife ohne Probleme funktionieren?

1 Stimmen

Aktivieren Sie Core-Dumps mit ulimit; führen Sie das Skript aus; wenn Sie sich die Core-Datei ansehen, wird sie Ihnen sagen, welcher Prozess zu ihrer Erstellung geführt hat - höchstwahrscheinlich der PHP-Interpreter, so dass es sich nicht um ein Bash-Problem handelt; Sie können dann einen Stack-Trace aus dem Core-Dump erzeugen, um ihn der entsprechenden Partei zu melden.

2voto

Fuzzy76 Punkte 872

Wahrscheinlich wegen dieses Fehlers, der sowohl Ubuntu als auch Debian betrifft... https://bugs.launchpad.net/ubuntu/+Quelle/php5/+Bug/343870

0 Stimmen

Ich habe das gleiche Problem mit Debian, aber nicht mit CentOS

1voto

slipbull Punkte 1457

Es sollte und es tut, aber keine Ahnung, warum php mit einem Segfault endet.

1voto

ghostdog74 Punkte 305138

Ihre Shell-While-Schleife wird ewig schleifen, da Ihr Php-Skript 4 an die Shell zurückgibt und Ihre While-Schleife auf !=5 prüft, was bedeutet, dass die Bedingung nicht erfüllt wird. was wollen Sie eigentlich tun? wenn es nicht notwendig ist, würde ich raten, alles mit Php (oder Shell) zu tun, aber versuchen Sie nicht, beide zu vermischen.

0 Stimmen

Die Vermischung von beidem steht ganz im Einklang mit der UNIX-Ideologie der "vielen kleinen Werkzeuge"; andere Programme aufzurufen und deren Exit-Code zu überprüfen, ist schließlich das, was die Shell am besten kann :) Der Vorteil, alles in PHP zu packen, besteht darin, dass nicht bei jedem Schleifenzyklus ein neuer Interpreter gestartet werden muss - sicherlich eine Leistungssteigerung, wenn auch vielleicht eine mit Auswirkungen auf die Korrektheit (wenn PHP globale Variablen verwendet).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X