Diese Website existiert nur weil wir Werbung mit AdSense ausliefern.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.

Process-ID erweitern

Alles rund um die verschiedenen Konsolen und shells sowie die Programmierung unter Linux

Moderator: Moderatoren

Antworten
Benutzeravatar
regexer
Advanced Hacker
Advanced Hacker
Beiträge: 1005
Registriert: 3. Dez 2004, 09:29
Wohnort: $_

Process-ID erweitern

Beitrag von regexer »

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.
Benutzeravatar
robi
Moderator
Moderator
Beiträge: 3174
Registriert: 25. Aug 2004, 02:13

Beitrag von robi »

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
Benutzeravatar
oc2pus
Ultimate Guru
Ultimate Guru
Beiträge: 6506
Registriert: 21. Jun 2004, 13:01

Beitrag von oc2pus »

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 ...
tell people what you want to do, and they'll probably help you to do it.
PackMan
LinWiki : Das Wiki für Linux User
Benutzeravatar
robi
Moderator
Moderator
Beiträge: 3174
Registriert: 25. Aug 2004, 02:13

Beitrag von robi »

Also ich hab mich dann mal durch die Headerdateien gewühlt.
Ergebniss:

Code: Alles auswählen

#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: Alles auswählen

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
Benutzeravatar
regexer
Advanced Hacker
Advanced Hacker
Beiträge: 1005
Registriert: 3. Dez 2004, 09:29
Wohnort: $_

Beitrag von regexer »

robi hat geschrieben:Habe das eben mal ausprobiert geht wirklich problemlos, hätte nicht für möglich gehalten
:o :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...
Benutzeravatar
robi
Moderator
Moderator
Beiträge: 3174
Registriert: 25. Aug 2004, 02:13

Beitrag von robi »

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
Benutzeravatar
regexer
Advanced Hacker
Advanced Hacker
Beiträge: 1005
Registriert: 3. Dez 2004, 09:29
Wohnort: $_

Beitrag von regexer »

robi hat geschrieben: 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...
Antworten