[linux-l] Mit Pipe erzeugte Prozesse "a | b" im Supervisord kontrollieren

Volker Grabsch vog at notjusthosting.com
Mo Mai 13 20:08:10 CEST 2013


Hauke Laging schrieb:
> Am Mo 13.05.2013, 16:10:49 schrieb Volker Grabsch:
> 
> > Möchte ich nun diesen überwachen,
> 
> Die Frage ist: Wie sieht diese Überwachung denn aus?

Wie das im Detail konfiguriert wird, ist letztendlich
unwichtig. Der Punkt ist, dass bei der Pipe der überwachte
Prozess nicht das Kommando "b" ist, sondern die drüberliegende
Shell, die die Pipe organisiert hat. Wenn die z.B. gekillt
wird, läuft der Prozess "b" weiter. Daher funktioniert
die Prozess-Überwachung nicht.

Supervisord und Daemontools sind sehr verschieden programmiert
und werden komplett unterschiedlich konfiguriert. Dennoch
zeigen sie beide genau das gleiche Problem. Daher suche
ich das Problem in meinem Prozess/Script und nicht im
Prozessüberwachungstool.

> Oh, die bezüglich Sicherheit saubere Lösung ist in jedem Fall komplex. Wovor 
> schützt man sich? Als welcher User laufen die Prozesse? Sind die vor ptrace 
> geschützt? Ist /proc dicht? Wenn man sich vor Prozessen mit derselben UID 
> schützten will, wird es schnell spannend. Wenn nicht, ist die Lösung trivial.

Es geht nur um Schutz vor Prozessen, die mit einer anderen
UID laufen.

> Variante 3:
>
>     b <(a)

Das hatte ich noch nicht versucht! Ich habe das gerade ausprobiert,
leider ist das nicht portabel. Es läuft in bash und zsh, aber nicht
in dash. Aber: In diesen Shells hat es die gewünschte Wirkung.

Außerdem ist mit aufgefallen, dass das ursprüngliche Konstrukt "a | b"
in der zsh hervorragend funktioniert, nur nicht in bash und dash.

Zusammengefasst habe ich damit folgende Konstrukte, die funktionieren:

bash -c 'b <(a)'
zsh -c 'b <(a)'
zsh -c 'a | b'

Oder konkreter:

bash -c 'sh <(xsltproc ...)'
zsh -c 'sh <(xsltproc ...)'
zsh -c 'xsltproc ... | sh'

Dennoch: Gibt's auch etwas, das in jeder Shell funktioniert?
Oder einen ganz anderen, eleganteren Ansatz?


Gruß
Volker

-- 
Volker Grabsch
---<<(())>>---



Mehr Informationen über die Mailingliste linux-l