Bash-Skript: kann SIGTSTP nicht korrekt verarbeiten

8

Ich habe ein Bash-Skript, das ein Gerät mountet und unmount, das dazwischen einige Leseoperationen durchführt. Da das Gerät sehr langsam ist, dauert das Skript etwa 15 Sekunden (die Aufnahme dauert mindestens 5-6 Sekunden). Da das Aufrufen dieses Geräts weitere Probleme verursachen kann, möchte ich dieses Skript nicht unterbrechen.

Nachdem ich das gesagt habe, kann ich SIGINT (Ctrl + c) korrekt behandeln, aber wenn ich versuche, SIGTSTP (Strg + z) zu behandeln, friert das Skript ein. Das bedeutet, das Signal ist gefangen, aber der Handler läuft nicht.

%Vor%

Ich muss manuell das KILL-Signal an den Prozess senden. Irgendeine Idee, warum das passiert und wie ich es beheben kann?

    
Ram 10.10.2012, 17:01
quelle

1 Antwort

4

Die Shell führt den Trap erst aus, wenn der aktuell ausgeführte Prozess beendet ist. (Zumindest ist das das Verhalten von bash 3.00.15). Wenn Sie SIGINT über ^ c senden, wird es an alle Prozesse in der Vordergrundprozessgruppe gesendet; Wenn das aktuell laufende Programm es empfängt und beendet, kann bash den Trap ausführen. Ähnlich mit SIGTSTP über ^ z; bash empfängt das Signal, führt die Trap jedoch erst aus, wenn das laufende Programm beendet wird, was nicht der Fall ist, wenn es das Standardverhalten annimmt und ausgesetzt wird. Ersetzen Sie ... durch ein einfaches read f und beachten Sie, dass der Trap sofort ausgeführt wird.

    
William Pursell 10.10.2012, 17:29
quelle

Tags und Links