Forum: PC-Programmierung syslog mit pid in konstanter Länge


von Herbert (Gast)


Lesenswert?

Hi
Ich muss in einen syslog template die pid ausgeben und dabei darauf 
achten das diese immer mit 4 Zahlen dargestellt wird. Also wenn die pid 
789 ist soll 0789 stehen. für die pid benutze ich folgenden Befehl aber 
ich weis nicht wie ich ihn dazu bringe die Länge automatisch zu 
erweitern!? es ist syslog version 7.4.7. Danke im Vorhinein für eure 
Antworten!

property(name="procid")

mfg Herbert

von Zuschauer (Gast)


Lesenswert?

Die PID ist aber traditionell 5-stellig (bzw. 16 Bit signed). Rechner, 
auf denen wirklich was los ist, nutzen evt. auch 32 Bit. Du solltest 
evt. etwas mehr über deine Anwendung erzählen.

von Herbert (Gast)


Lesenswert?

Mein System ist ein normales Linux Betriebssystem und ich habe einfach 
ein Template für meine Syslog Nachrichten geschrieben. Die PID ist ja 
immer dir die PID welche auch in Htop angezeigt wird und dieses ist bei 
mir eben meistens 3 stellig aber ich brauch sie im Log File als 
4stellige Zahl mit 0en davor wenn die pid nicht schon 4stellig ist. Gibt 
es dazu eine einfach Lösung die man in ein syslog template einbauen 
kann?
mfg Herbert

von Rolf M. (rmagnus)


Lesenswert?

Herbert schrieb:
> Mein System ist ein normales Linux Betriebssystem und ich habe einfach
> ein Template für meine Syslog Nachrichten geschrieben. Die PID ist ja
> immer dir die PID welche auch in Htop angezeigt wird und dieses ist bei
> mir eben meistens 3 stellig aber ich brauch sie im Log File als
> 4stellige Zahl mit 0en davor wenn die pid nicht schon 4stellig ist.

Und wie soll sie angezeigt werden, wenn sie 5 Stellen hat?

> Gibt es dazu eine einfach Lösung die man in ein syslog template einbauen
> kann?

Laut Handbuch von rsyslog kann man "fixedwidth" angeben, dann wird mit 
Leerzeichen auf die gewünschte Länge aufgefüllt.

von Herbert (Gast)


Lesenswert?

Hi

Also wenn die PID länger als 4 Stellen ist wird sie normal angezeigt. 
Vorgabe ist einfach nur das sie immer 4 Stellen lang sein muss also das 
im Notfall eine 0 vorne eingefügt werden muss.

Den Befehl fixedwidth habe ich schon gesehen aber der geht was ich so 
gelesen habe bei syslog version 7 noch nicht und vorallem fügt er ja nur 
leerzeichen ein!

mfg Herbert

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Herbert schrieb:
> Also wenn die PID länger als 4 Stellen ist wird sie normal angezeigt.
> Vorgabe ist einfach nur das sie immer 4 Stellen lang sein muss also das
> im Notfall eine 0 vorne eingefügt werden muss.

Diese Vorgabe ist ziemlich unsinnig. Da pid_t aus historischen Gründen 
als C-Typ "short" definiert ist, gehen die PIDs bis 32767, bevor sie 
wieder von vorn gezählt werden.

Das heisst: In ca. 2/3 aller Fälle sind die PIDs 5-stellig. Wenn man 
eine einheitliche Formatierung haben will (und darum geht es doch?), 
sollte man die Vorgabe auf 5 Stellen korrigieren.

Also: Hinterfrage die Vorgabe, statt etwas stumpfsinnig umsetzen zu 
wollen, was dann im Nachhinein wieder korrigiert werden muss.

: Bearbeitet durch Moderator
von Herbert (Gast)


Lesenswert?

Hi
Also die Vorgabe ist ja eigentlich nur das die PID mindestens 4 stellen 
lang sein sollte. Wenn sie also bereits 4 oder 5 Zeichen lang ist ist es 
kein Problem. Aber wie setze ich im syslog Template um das auch 
dreistellige PIDs mit 4 Zeichen (0 davor) dargestellt werden?! Gibt es 
da überhaupt eine Möglichkeit? Also irgendwie eine Abfrage wie lange die 
PID ist und dann gegebenenfalls eine 0 hinzufügen!?

mfg Herbert

von John Doe (Gast)


Lesenswert?

Frank M. schrieb:
> Herbert schrieb:
>> Also wenn die PID länger als 4 Stellen ist wird sie normal angezeigt.
>> Vorgabe ist einfach nur das sie immer 4 Stellen lang sein muss also das
>> im Notfall eine 0 vorne eingefügt werden muss.
>
> Diese Vorgabe ist ziemlich unsinnig. Da pid_t aus historischen Gründen
> als C-Typ "short" definiert ist, gehen die PIDs bis 32767, bevor sie
> wieder von vorn gezählt werden.


Bullshit, jedenfalls für Linux.
Ich machs kurz: RTFM.

man 5 proc:

       /proc/sys/kernel/pid_max (since Linux 2.5.34)
              This file specifies the value at which PIDs wrap around 
(i.e., the value in this file is one  greater  than  the  maximum  PID). 
PIDs greater  than  this  value are not allocated; thus, the value in 
this file also acts as a system-wide limit on the total number of pro 
cesses and threads.  The default value for this file, 32768, results in 
the same range of PIDs as on earlier kernels.  On 32-bit  plat 
forms,  32768 is the maximum value for pid_max.  On 64-bit systems, 
pid_max can be set to any value up to 2^22 (PID_MAX_LIMIT, approxi 
mately 4 million).


Ich habe jedenfalls grosse Systeme mit größerem pid_max laufen.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

John Doe schrieb:
> Bullshit, jedenfalls für Linux.

Aha :-)

> On 32-bit  plat
> forms,  32768 is the maximum value for pid_max.

Hier stimmts also zumindest.

> On 64-bit systems,
> pid_max can be set to any value up to 2^22 (PID_MAX_LIMIT, approxi
> mately 4 million).

Was hast Du an "can be set" nicht verstanden? Default ist es jedenfalls 
nicht. Hier bleibts bei 32768 als obere Grenze. Dass die "historische 
Grenze" von 32768 nicht auch überwunden werden kann, habe ich nirgendwo 
behauptet. Ich habe lediglich beschrieben, dass PIDs schon per Default 
durchaus mehr als 4 Stellen haben können.

Dieses hast Du bestätigt. Danke :)

> Ich habe jedenfalls grosse Systeme mit größerem pid_max laufen.

Dass bei Dir die PIDs sogar mehr als 5 Stellen haben können, 
widerspricht nicht meiner Aussage, dass sie schon prinzipiell mehr als 
4 Stellen haben können.

"Bullshit" ist daher hier nicht ganz zutreffend ;-)

Hier eine 64-Bit-Maschine:
1
# uname -a
2
Linux www 4.9.0-6-amd64 #1 SMP Debian 4.9.82-1+deb9u2 (2018-02-21) x86_64 GNU/Linux

Die PIDs werden auf diesem System nicht größer als 32768. Auch nicht 
nach Tagen, Wochen oder sogar Jahren uptime.

: Bearbeitet durch Moderator
von Mad Max (Gast)


Lesenswert?

Frank M. schrieb:
> "Bullshit" ist daher hier nicht ganz zutreffend ;-)

In der Sache ist das sicherlich richtig, denn Du hast geschrieben:
>Diese Vorgabe ist ziemlich unsinnig. Da pid_t aus historischen Gründen
>als C-Typ "short" definiert ist, gehen die PIDs bis 32767, bevor sie
>wieder von vorn gezählt werden.


Und unter Linux ist das eben nicht der Typ short, sondern signed 
integer.
Somit ist das schlichtweg falsch.


> Die PIDs werden auf diesem System nicht größer als 32768. Auch nicht
> nach Tagen, Wochen oder sogar Jahren uptime.


Ja, weil das die Default-Einstellung ist, die von vielen so übernommen 
wird, wenn der Kenel kompiliert wird. Ändert aber nichts an Deiner 
falschen Aussage. Ob man die nun gleich als Bullshit bezeichnen muss, 
ist eine andere Sache ;)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.