Forum: PC-Programmierung IPC nach Reboot


von Lutz (Gast)


Lesenswert?

Hallo zusammen,

ich habe ein Problem mit IPC auf einem Linux Ubuntu 16.04 64bit (kernel 
4.4.0-75-generic).

Ein third party Programm benutzt IPCs. Das Programm ist vom Kunden 
gestellt. Wenn ich den Rechner neustarte, funktioniert das Programm aber 
nicht richtig. Ich muss zuerst mit
1
ipcrm -a
alle IPCs loeschen.

Jedoch sehe ich mit
1
ipcs
keinen Unterschied bevor und nach dem Loeschen. Die einzigen Ressourcen 
(Shared Memory), die nach einem Neustart gelistet werden wurden vom X 
angelegt/genutzt (xfwm4, Xorg, xfdesktop).

Wenn ich die IPCs geloescht habe, kann ich das Programm beliebig oft 
neustarten/stoppen und es funktioniert solange bis ich den Rechner 
neustarte.

Mit ipcrm -a --verbose sehe ich auch nicht, was da noch geloescht werden 
koennte.

Ich bin eigentlich davon ausgegangen, dass die IPC Ressourcen einen 
Neustart nicht "ueberleben". Aber anscheinend ist da trotzdem noch 
irgendwo etwas, das von ipcrm auch geloescht wird. Habt ihr eine Idee?

Vielen Dank und viele Gruesse
Lutz

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Lutz schrieb:
> Ich bin eigentlich davon ausgegangen, dass die IPC Ressourcen einen
> Neustart nicht "ueberleben".

So sollte es sein.

Lass das Programm doch mal mit strace laufen und schaun nach, worüber es 
stolpern könnte. Oder frag den Kunden nach einer ordentlichen 
Fehlermeldung …

von foobar (Gast)


Lesenswert?

Was sein könnte: irgend einer der IPC-Resourcen ist erschöpft.  Die 
hängen evtl noch rum, auch wenn der Prozess beendet wurde, bis sie 
explizit gelöscht werden, z.B. durch ein "ipcrm -a".  Dadurch wird 
wieder was frei und das Programm läuft.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

foobar schrieb:
> Was sein könnte: irgend einer der IPC-Resourcen ist erschöpft.

Nach einem Reboot?

von foobar (Gast)


Lesenswert?

>> Was sein könnte: irgend einer der IPC-Resourcen ist erschöpft.
>
> Nach einem Reboot?

Nun ja, er hat dX schon laufen und Resourcen sind bereits belegt.  Da 
reicht ein blödes Programm, dass das IPC_RMID vergessen hat ...

von Icke (Gast)


Lesenswert?

Jörg W. schrieb:
> Oder frag den Kunden nach einer ordentlichen Fehlermeldung …

Schon passiert :P Aber man kennt die Kunden ja... ;)

Das mit strace schaue ich Montag an. Das "Problem" dabei ist, dass das 
"Program" eigentlich eine shared-Library ist, die von einem komplexen 
Framework geladen wird. Mal schauen, ob ich da irgendwas sehen/zuordnen 
kann..

Vielen Dank schonmal!

Das interessante ist auch, dass bei einem Neustart vom Programm alles 
funktioniert, obwohl ressourcen eventuell nicht freigegeben wurden (das 
sehe ich auch mit ipcs).

Ich hätte es verstanden, wenn das Programm streikt, wenn nicht 
aufgeräumt wurde. Aber bei einem "jungfräulichen" Start vom PC streikt 
es...

von Schmittchen (Gast)


Lesenswert?


von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

foobar schrieb:
> Da reicht ein blödes Programm, dass das IPC_RMID vergessen hat ...

Das sollte dann allerdings auch mit ipcs -a zu sehen sein.

Wenn ipcs -a vor und nach dem ipcrm keinen Unterschied zeigt, es aber 
danach dann geht, ist das schon außerordentlich seltsam.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Schmittchen schrieb:
> Was genau ist ein IPC?

Im Gegensatz zu dir haben das alle anderen im Thread verstanden - also 
halt dich am besten raus.

von Lutz (Gast)


Lesenswert?

Ups, der Post von "Icke" ist auch von mir (TO). Bin an einem anderen 
PC...

foobar schrieb:
>>> Was sein könnte: irgend einer der IPC-Resourcen ist erschöpft.
>>
>> Nach einem Reboot?
>
> Nun ja, er hat dX schon laufen und Resourcen sind bereits belegt.  Da
> reicht ein blödes Programm, dass das IPC_RMID vergessen hat ...

Aber ich sehe vor und nach "ipcrm -a" das gleiche Resultat in "ipcs" 
(auch mit den unterscheidlichen Optionen -c -t -p).
Die Ressourcen werden laut "ipcs" auch nach dem Start vom Rechner nicht 
mehr geändert ("ipcs -t" zeigt kein geändertes "changed" an).

von foobar (Gast)


Lesenswert?

> Das sollte dann allerdings auch mit ipcs -a zu sehen sein.

Jo.

> Wenn ipcs -a vor und nach dem ipcrm keinen Unterschied zeigt, es aber
> danach dann geht, ist das schon außerordentlich seltsam.

Genau - deshalb vermute ich eher ein Problem beim Tester ;-)

von Lutz (Gast)


Lesenswert?

Schmittchen schrieb:
> Lutz schrieb:
>> ich habe ein Problem mit IPC
>
> Was genau ist ein IPC? Meinst du damit einen Industrie-PC:

InterProcessCommunication, also Shared Memory, Semaphoren oder Message 
Queues
https://de.wikipedia.org/wiki/Interprozesskommunikation

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Lutz schrieb:
> InterProcessCommunication, also Shared Memory, Semaphoren oder Message
> Queues

Genau genommen, die von ihrer Semantik her nicht wirklich ins 
Unix-Konzept passende SysV-IPC. Braucht man eigentlich nicht (lässt sich 
auch alles anders erreichen), aber wenn das ein Kundenprogramm ist, 
kannst du daran nichts ändern.

von Lutz (Gast)


Lesenswert?

foobar schrieb:
>> Das sollte dann allerdings auch mit ipcs -a zu sehen sein.
>
> Jo.
>
>> Wenn ipcs -a vor und nach dem ipcrm keinen Unterschied zeigt, es aber
>> danach dann geht, ist das schon außerordentlich seltsam.
>
> Genau - deshalb vermute ich eher ein Problem beim Tester ;-)

Den vermute ich fast auch, bzw. kann es mir halt nicht erklären :P
Deswegen hab ich auch erst eine Nacht drüber geschlafen und das heute 
nochmal probiert mit dem gleichen Ergebnis.

Eventuell ist es der Einfluss aus dem Gesamtsystem...
Die Server sind diskless und bekommen ihr OS über PXE (read-only). 
Zusätzlich wird ein RW filesystem gemountet (~/home/, /var/log, etc.).
Den Rechner reboote ich mit einem einfachen "sudo reboot".

von foobar (Gast)


Lesenswert?

> Aber ich sehe vor und nach "ipcrm -a" das gleiche Resultat in "ipcs"

Man übersieht schnell was.  Ich würd es so angehen:
1
$ cat /proc/sysvipc/* >a
2
$ programm  # abbruch mit Fehler
3
$ cat /proc/sysvipc/* >b
4
$ ipcrm -a
5
$ cat /proc/sysvipc/* >c
6
$ programm # läuft jetzt
7
$ diff -u b c
8
$ diff -u a b
9
$ diff -u a c

von Lutz (Gast)


Lesenswert?

foobar schrieb:
>> Aber ich sehe vor und nach "ipcrm -a" das gleiche Resultat in "ipcs"
>
> Man übersieht schnell was.  Ich würd es so angehen:
>
>
1
> $ cat /proc/sysvipc/* >a
2
> $ programm  # abbruch mit Fehler
3
> $ cat /proc/sysvipc/* >b
4
> $ ipcrm -a
5
> $ cat /proc/sysvipc/* >c
6
> $ programm # läuft jetzt
7
> $ diff -u b c
8
> $ diff -u a b
9
> $ diff -u a c
10
>

Das hört sich gut an! Wird am Montag geprüft :)

von Rolf M. (rmagnus)


Lesenswert?

Oder gleich ein threeway-diff mit meld oder kdiff3 oder so, falls 
verfügbar.
meld a b c

: Bearbeitet durch User
von Lutz (Gast)


Lesenswert?

So, nach dem Wochenende habe ich es mir nochmal angeschaut.
Es ist anscheinend kein Problem vom IPC nach dem Reboot (wie zu erwarten 
war).

Das Programm macht anscheinend irgendwas komisches beim Initialisieren.
Es startet naemlich auch nicht, wenn ich "ipcrm -a" VOR dem reboot 
mache.

Es sieht so aus, als ob es einfach zwei Anlaeufe braucht bis alles 
initialisiert ist...
Nach dem ersten Anlauf ist aber eine Ressource geblockt und deswegen ist 
ein "ipcrm -a" noetig. Ich sehe dass es nach dem ersten Anlauf 
Aenderungen im SHM vom X gab.

Dann geht das jetzt zurueck an den, der das verbrochen hat, da ich hier 
nichts weiter machen kann.

Ich danke euch vielmals fuer die Hilfe!

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.