Hi Christian,
Prozesse können schon im Hintergrund laufen, Ctrl+Z führt nur zu SIGTSTP, was den Prozess anhält, mit bg kannst Du den Prozess dann in den Hintergrund schicken, wo er auch munter weiterläuft.
Ok - statt anhalten würde ich lieber pausieren sagen, der Prozess wird doch wenn in den BG geschickt dort fortgesetzt, wo er durch SIGTSTP "pausiert" wurde, oder? Egal was der Prozess gerade gemacht hat...
Interessant wäre aber noch die Frage, was passiert, wenn ich auf SIGTSTP im Prozess reagiere - ist das lediglich als Möglichkeit für den Programmierer gedacht, z.B. offene Dateien zu schließen, damit diese nicht für die ganze Zeit der Pause gesperrt sind - also: wird der Prozess nach seiner Reaktion auf SIGTSTP zwangsgestoppt oder kann der Prozess ein pausieren "unterdrücken", also nicht ermöglichen?
Nur wenn sie Ausgabe produzieren oder Eingabe erwarten, wird automatisch das Signal SIGTTOU (Ausgabe) oder SIGTTIN (Eingabe) generiert - was die Prozesse sofort beendet. Wobei... Bei mir auf meinem System produziert PHP Ausgabe, obwohl der Prozess im Hintergrund läuft. SIGTTIN greift dagegen (d.h. sobald ein Prozess versucht von der Standardeingabe zu lesen, wird SIGTTIN geschickt). Ist vielleicht irgend ein Flag, das bei mir gesetzt ist...
Ich habe mal einen PHP Prozess gemacht, welcher über Kommandozeile gestartet wurde, sich dann geforked und von der Shell gelöst hat - verwende ich in dem PHP Prozess dann echo, so wir mir (als eingeloggtem User) auf der Shell die Ausgabe angezeigt, die wird einfach zwischendurch eingeblendet, egal was ich gerade mache (nimmt aber keinen Einfluss auf eventuelle Eingaben von mir).
Wobei mir noch nicht ganz klar ist, warum es SIGTSTP, SIGTTIN _und_ SIGTTOU gibt - im Prinzip würde doch ersteres reichen um Prozesse zu stoppen. Oder gibt es das nur, damit eine automatische Erkennung möglich ist, weshalb der Prozess gestoppt ist bzw. was er will?
Du überfragst mich gerade. ;-) Vor allem frage ich mich, was nach einem Signalhandler passiert: Wird der Prozess gestoppt oder nicht? Muss ich mal in Ruhe austesten.
Vermutlich habe ich dich mit manchen Sachen jetzt wieder überfragt - aber wer weiß, vielleicht liest ja noch jemand anderes mit, der es weiß ;-)
MfG, Dennis.