Was ist der Grund dafür, dass apt-get mit dem Rückgabecode 137 fehlschlägt?

Was ist der Grund dafür, dass apt-get mit dem Rückgabecode 137 fehlschlägt?

Ich versuche, 0adden Dienst travis-ci aufzubauen, und erlebe zufällig Fehler von apt-get install(oder apt-get dist-upgrade) mit Rückgabecode 137 ohne weitere Informationen. travis-ci basiert auf Ubuntu 12.04. Was bedeutet 137? Eine Beispielausgabe finden Sie unterhttps://travis-ci.org/krichter722/0ad/jobs/92938434.

Einige weitere Systeminformationen.

$ uname -a && lsb_release -a
Linux testing-worker-linux-89e97461-1-15272-linux-4-69692739 2.6.32-042stab090.5 #1 SMP Sat Jun 21 00:15:09 MSK 2014 x86_64 x86_64 x86_64 GNU/Linux
No LSB modules are available.
Distributor ID:    Ubuntu
Description:    Ubuntu 12.04 LTS
Release:    12.04
Codename:    precise

Antwort1

Eine Antwort zum Signal-/Fehlerrückgabestatus eines Prozesses... also... ok...

Von demSchlag manpage(UndallgemeinInam meistenShell-Dokumentation), ganz weit unten im Abschnitt "Shell Grammer" und dann "Einfache Befehle", gibt es eine harmlose Aussage, die folgendermaßen lautet:

The return value of a simple command is its exit status,
  or 128+n if the command is terminated by signal n.

Der Rückgabewert eines Shell-Prozesses (Bash, Sh, Dash, Ksh, Csh usw.) (einfacher Befehl) ist ein 8-Bit-Wert ohne Vorzeichen, der im Bereich zwischen 0 und 255 liegen sollte. Normalerweise wird Null (0) als „Erfolg“ und alles andere als „Fehler“ verwendet. Die Shell gibt an, dass ein Prozess unterbrochen/abgebrochen/signalisiert wurde, indem sie dem Signalwert 128 hinzufügt und diesen als Rückgabewert verwendet.

Wenn Sie alt genug sind, erinnern Sie sich vielleicht an die Abbrüche mit dem Fehler 139 (Signal 11) während der Kernel-Kompilierung (esGEBRAUCHTdie ganze Nacht einnehmen!), wenn Sie Probleme mit dem Speicher oder Überhitzung hatten.

Fehler 137 zeigt an, dass der apt-get-Prozess ein Signal 9 empfangen hat (128+9=137) und Signal 9TÖTEN.

Wenn Sie sich bei den Signalnamen und -nummern nicht sicher sind, sehen Sie sich die Ausgabe des kill -lBefehls an:

$ kill -l
 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
 6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL     10) SIGUSR1
11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM
... lots more ... 64 total

Aha! Wunderbarer Artikel auf Wikipedia, unterBeendigungsstatus, insbesondere dieShell und SkripteAbschnitt. Darin wird erklärt, dass einwarteDer Exit-Status eines Prozesses ist eine Ganzzahl (int), Shell-Prozesse erhalten nur die unteren 8 Bits. Es wird auch über die '128+n'-Begründung gesprochen. (Vielleicht ist die Wikipedia-Aussage über ksh, das '256+n' verwendet, falsch, da dieksh-Manpagesagt '128+n')

Lesen Sie den Wikipedia-Artikel, da dort die unterschiedlichen Interpretationen verschiedener Programmiersprachen und Schnittstellen erläutert werden.

Hoffe das hilft.

(Und ja, ich lese ALLE Manpages, Sie nicht?)

Nachtrag:

travis-citutvorschlagenZunichtVerwenden Sie apt-get upgrade(und im weiteren Sinne apt-get dist-upgrade) die virtuellen Maschinen. Installieren Sie, was Sie möchten, aber die VMs sind im Allgemeinen gut ausgestattet und auf dem neuesten Stand.

Gebrauch vonapt-get upgrade Maihaben dazu beigetragen, dass apt-get empfangen wirdSIGKILL. Ohne weitere Informationen vontravis-ci, wir können nicht genau feststellen, warum. Aber normalerweise...SIGKILLwird verwendet, wenn Sie etwas Schlechtes getan haben, übermäßige Ressourcennutzung, hohe CPU-Auslastung und dergleichen ... auch hier wissen wir es nicht, wir können es aus den Protokollen, die wir gesehen haben, nicht sagen. (Nebenbei: Schauen Sie sich anulimit(in der Bash-Manpage) undsetrlimit/getrlimit(2)und wie mit seinen verschiedenen Grenzen umgegangen wird …RLIMIT_CPU(oder-T) scheint hier angebracht)

Antwort2

Da es keine Fehlermeldung von gibt apt-get, kann ich der Idee von @lornix zustimmen. Ich erwarte jedoch nur ein Problem mit der verfügbaren Größe im Dateisystemkontingent oder es könnte an der parallelen Downloadfunktion von apt-get liegen. (Es verwendet standardmäßig einen Thread für jede Quelle.)

Hier ziemlich optimiert, um Ressourcen zu minimieren (aber mehr Zeit)

uname -a && lsb_release -a && df
sudo apt-get update
sudo apt-get install python-software-properties
sudo add-apt-repository --yes ppa:wfg/0ad.dev
sudo add-apt-repository --yes ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get remove oracle-java7-installer oracle-java8-installer postgresql-9.2 postgresql-contrib-9.2 postgresql-9.2-postgis-2.1 postgresql-9.3 postgresql-contrib-9.3 postgresql-9.3-postgis-2.1 postgresql-9.4 postgresql-contrib-9.4 postgresql-9.4-postgis-2.1 postgresql-9.1 postgresql-9.1-postgis-2.1 postgresql-9.1-postgis-scripts postgresql-9.2-postgis-scripts postgresql-9.3-postgis-scripts postgresql-9.4-postgis-scripts postgresql-client postgresql-client-9.1 postgresql-client-9.2 postgresql-client-9.3 postgresql-client-9.4 postgresql-client-common postgresql-common postgresql-contrib-9.1
yes | sudo apt-get -o Acquire::Queue-mode=access -yy --yes upgrade
yes | sudo apt-get -o Acquire::Queue-mode=access -yy --yes dist-upgrade

verwandte Informationen