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

defunct-Prozesse

frankbrn

Newbie
Hallo,

ich habe folgendes Problem:

Ich starte aus einer Shell heraus ein Programm:

<start_command> <parameters> </dev/null" &

Durch die Eingabeumlenkung nach /dev/null sind die Prozesse alle defunct. Das Problem tritt allerdings nur unter Linux 2.6.X auf, unter Linux 2.4, Solaris, HP-UX etc. funktioniert das.

Kann mir hier jemand weiterhelfen?

Vielen Dank,
frankbrn :(
 
A

Anonymous

Gast
frankbrn schrieb:
<start_command> <parameters> </dev/null" &

Schreib mal genau auf, was du da losläßt, in dieser einen Zeile da, muss minimum ein Schreibfehler drin sein. Mit nur einem " würde das keine Shell annehmen.
Ach nur mal falls du was verwechselt hast, aus /dev/null kannst du nur ein einziges "EOF" lesen. NULLEN gibts woanders.

robi
 
OP
F

frankbrn

Newbie
Hallo,

hier nochmal der Befehl aus dem KSH-Script:

su $euid -c "$NOHUP $start_cmd $pars </dev/null" &

wobei $euid der User ist unter dem das Start-Kommando ausgeführt wird. Das Skript startet ein Binary. Da sich das Script nach dem Aufruf beendet, ist der aufgerufene Prozess (steht in $start_cmd) defunct.
Der Aufruf funktioniert unter Solaris, HPUX und AIX!!! Er macht nur unter Linux ab der Kernel-Version 2.6.8 Probleme. Ich denke also nicht, dass das Skript verkehrt ist (läuft sein mind. 5 Jahren!). Ich suche einen Weg zu vermeiden, dass der aufgerufene Prozess defunct wird, sobald das Shell-Skript beendet wird.

Gruß
frankbrn
 
A

Anonymous

Gast
Stellt sich mir trotzdem die Frage: Was willst du mit </dev/null bewirken?

Soll irgend etwas dort hin geschoben werden, dann >/dev/null
</dev/null würde an die Standarteingabe von $start_cmd ein END-OF- FILE senden, also für ein normales Kommando was über den Standarteingabe ließt, den sofortigen Befehl zum Benden senden. Na ja, wird wohl eine besondere Eigenart deines Programmes sein.
So wie du das startest entstehen minimum 3 Prozesse. Wobei su in den Hintergrund gestartet wird und start-cmd durch NOHUP abgesichert ist.

su -c nohup start-cmd -option </dev/null
bash -c nohup start-cmd -option </dev/null
start-cmd -option </dev/null


ich würde mal versuchen das umzuschreiben, so das start-cmd im Hintergrund läuft und mit NOHUP abgefedert ist, indem du & weiter nach vorne legst.

Ansonsten läuft aber auch die Befehlsgruppierung, wie du sie hast bei mir problemlos mit einige Testbefehlen. Allerdings erfolgt die Abkopplung von der sich beendenden Bash schon im su-Prozess ? Habe ich so nicht erwartet. Kann aber nicht nachvollziehen das die Befehlgruppierung irgendwas auf defunct stellt.

Code:
# su -c"nohup sleep 120 </dev/null " &
............................................................
S root      5273  5213  0  78   0 -   606 wait4  11:32 pts/3  su -cnohup sleep 120 </dev/null
S root      5274  5273  0  79   0 -   638 wait4  11:32 pts/3  bash -c nohup sleep 120 </dev/null
S root      5275  5274  0  79   0 -   451 schedu 11:32 pts/3  sleep 120
...........................................
S root      5273     1  0  78   0 -   606 wait4  11:32 ?      su -cnohup sleep 120 </dev/null
S root      5274  5273  0  79   0 -   638 wait4  11:32 ?      bash -c nohup sleep 120 </dev/null
S root      5275  5274  0  79   0 -   451 schedu 11:32 ?      sleep 120

robi
 
Oben