"out of memory"-Killer. Der Linux-Kernel vergibt für Prozesse verschiedene Scores, anhand derer sie gekillt werden, falls zu wenig RAM zur Verfügung steht. Das kann man natürlich konfigurieren und auch für einzelne Prozesse komplett deaktivieren, aber wenn du keinen Arbeitsspeicher-Mangel hast, dann ist das eh egal.
Du kannst ja mal dein Programm mit strace laufen lassen:
Das wird dir tonnenweise Kernel-Calls ausgeben und vielleicht siehst du dann, was zuletzt getan wurde bevor es abstürzt.
Aber bevor du das probierst, ruf auch mal "dmesg" auf und guck, ob direkt nach dem Absturz des Programms dort etwas merkwürdiges zu finden ist. Mit "dmesg -w" kannst du es auch einfach in einem eigenen Terminal laufen lassen und siehst in Echtzeit, was passiert. Mit STRG+C einfach beenden.
Nächste Idee: Mit gdb debuggen.
Code: Alles auswählen
$ gdb deinProgramm
GNU gdb (Ubuntu 9.2-0ubuntu1~20.04) 9.2
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from deinProgramm...
(No debugging symbols found in deinProgramm)
(gdb) run
Wenn das Programm abstürzt, wirst du eine Fehlermeldung sehen und wenn es nicht ganz abgeschmiert ist, kannst du dir dann den Backtrace anschauen:
Und mit q beenden.
Noch eine Idee: Was sagt dein "ulimit"?
Code: Alles auswählen
nicolas@tp-w530:~$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 126521
max locked memory (kbytes, -l) unlimited
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 99
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 126521
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
Meine Prozesse dürfen standardmäßig nur 1024 Dateien gleichzeitig öffnen. Und üblicherweise zählen Netzwerkverbindungen zu den Dateien. Wenn du also mehr als 1024 Verbindungen öffnest plus die ganzen anderen Dinge, die im Hintergrund vielleicht noch passieren, dann schießt der Kernel deinen Prozess möglicherweise auch ab. Oder er lässt zumindest keine neuen Verbindungen mehr zu und dein Purebasic-Programm rechnet damit nicht und stürzt einfach ab.