• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Process-ID erweitern

regexer

Advanced Hacker
Die Process-ID wird unter Linux fortlaufend durchnummeriert. Wenn bis 32000 + irgendwas gezählt wurde, wird wieder von vorne angefangen.

Für diesen loop habe ich heute nicht einmal 2 Stunden gebraucht. Ich habe zwar noch kein Problem damit, aber es könnte noch eines werden. Denn ich lege viele Logfiles oder temporäre Dateien mit $$ als individuelle Kennung an. Meine Frage deshalb: lässt sich die Process-ID per Einstellung erweitern?

Es würde mich etwas wundern, wenn dies ginge. Aber bevor man sich an die Arbeit macht, alle scripte und programme umzustellen, sollte man erst einmal gaaanz einfach fragen.
 
A

Anonymous

Gast
na ich hab jetzt nicht in die Headerdateien vom Kernel reingeschaut, aber ich vermute mal wenn du das erweitern willst, dann musst du nicht nur den ganzen Kernel sondern auch alle libs und somit alle Programme neu kompilieren, also sprich einfach alles. Dort ist sicher eine Variabeldefinition etwa wie _pid_t definiert und diese Headerdatei ist mit _G_config.h oder irgend so was in jedes Programm eingebunden, da würde ich die Finger von lassen.

robi
 

oc2pus

Ultimate Guru
evtl hilft dir sysctl und sysctl.conf weiter.
Damit kannst du Kernelparameter beeinflussen.

sysctl -A listet alle Parameter auf.
habe leider grade keine Doku hier um den key für pids zu finden ...
 
A

Anonymous

Gast
Also ich hab mich dann mal durch die Headerdateien gewühlt.
Ergebniss:
Code:
#define __S32_TYPE              int
#define __PID_T_TYPE            __S32_TYPE
__STD_TYPE __PID_T_TYPE __pid_t;        /* Type of process identifications.  */
#define     _G_pid_t        __pid_t
also ist doch schon alles mit 32Bit kompiliert, und wird nur von sysctl kernel.pid_max = 32768
auf 32768 begrenzt. Nur finde ich auf meinem System bisher gar keine /etc/sysctl.conf und auch keinen entsprechenden Eintrag in den sysctl.h oder sysctl.c Dateien. Aber ich habe /proc/sys/kernel/pid_max gefunden. Also wenn ich demnächst mal mein Testsystem laufen habe werde ich dort mal echo 65536 >/proc/sys/kernel/pid_max absetzen und dann jede Menge Prozesse produzieren, mal sehen ob wir das System zum Absturz kriegen oder ob mir irgend ein Programm negative PID ausgibt.

robi

PS. Habe das eben mal ausprobiert geht wirklich problemlos, hätte nicht für möglich gehalten. :shock: :p
Code:
user@localhost:~> ps
   PID TTY          TIME CMD
222126 pts/3    00:00:00 bash
222135 pts/3    00:00:00 bash
222144 pts/3    00:00:00 bash
222153 pts/3    00:00:00 bash
222162 pts/3    00:00:00 ps
 
OP
regexer

regexer

Advanced Hacker
robi schrieb:
Habe das eben mal ausprobiert geht wirklich problemlos, hätte nicht für möglich gehalten
:eek: :shock:

Ich wäre zu feige gewesen, es auszuprobieren. Sehr gut! Bin begeistert...

Danke für's testen!

Zusatzfrage: Gab es die Datei pid_max schon auf deinem Rechner? Bei mir (SLES 8 ) gibt es sie nämlich standardmäßig nicht...
 
A

Anonymous

Gast
Auf meinem Standart Suse 9.1 war folgendes zu finden.

in der Ausgabe von sysctl -A da gabs "kernel.pid_max = 32768" und
cat /proc/sys/kernel/pid_max
32768

habe einfach echo 262144 > /proc/sys/kernel/pid_max gemacht und lief. ist aber nur temporär bis zum nächsten reboot, und wie es permanent mit der /etc/sysctl.conf konfiguriert wird, habe ich noch nicht versucht. Aber ich nehme an einfach kernel.pid_max=xxxxxx reinscheiben und rebooten.
Allerdings sind einige Ausgaben zB top dann doch etwas verzerrt, da dort max 5 Stellen eingeplant sind. Aber wenn die Spalten nicht so ganz sauber untereinander stehen, das kann man verschmerzen.

robi
 
OP
regexer

regexer

Advanced Hacker
robi schrieb:
in der Ausgabe von sysctl -A da gabs "kernel.pid_max = 32768" und
cat /proc/sys/kernel/pid_max
32768
Also SLES 8 spuckt bei sysctl -A keinen pid_max aus. Außerdem gibt es die Datei nicht.
Aber so weit so gut. Bei Gelegenheit werde ich das trotzdem einmal auf einem Testsystem ausprobieren...
 
Oben