Christian Seiler: Noch eine Frage

Beitrag lesen

Hallo Dennis,

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...

Ja, genau.

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?

Eine sehr gute Frage, ich würde inzwischen darauf tippen, dass der Prozess bei einem abgefangenem Signal weiterläuft, es sei denn, er schickt sich im Signalhandler selbst SIGSTOP (wenn er nochmal SIGTSTP schicken würde, würde er den Signalhandler bloß wieder aufrufen). Ist aber nur Spekulation meinerseits, ich bin noch nicht dazu gekommen, das näher auszutesten, komme vor dem Wochenende wahrscheinlich auch nicht dazu.

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).

Naja, wenn Du mit »von der Shell gelöst« setsid() meinst, dann ist klar, warum das passiert: setsid() legt eine neue Session und eine neue Prozessgruppe für den Prozess an. Außerdem löst es den Prozess vom Terminal. Es gibt unter UNIX das Konzept des »controlling terminal«. Im Prinzip kann ein Prozess nämlich auf jedes Terminal schreiben, sofern es die entsprechende Device-Datei öffnen kann. stdin/stdout/stderr sind bei Dir also immer noch offen, aber das Terminal hat keine Kontrolle über Deinen Prozess -> es schickt auch keine Signale.

Was mich eher gewundert hat, ist, dass mein Testprozess kein SIGTTOU bekommen hat, als ich ihn normal im Hintergrund laufen ließ (d.h. ohne setsid()). Beim Lesen von der Eingabe hat das dagegen funktioniert.

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?

Genau, Du willst erkennen können, warum der Prozess gestopt wurde. SIGTSTP wird erzeugt, wenn bei einem Vordergrundprozess Ctrl+Z (oder das, was dafür halt eingestellt ist) gedrückt wird, SIGTTIN/SIGTTOU werden bei Hintergrundprozessen erzeugt.

Viele Grüße,
Christian

--
"I have always wished for my computer to be as easy to use as my telephone; my wish has come true because I can no longer figure out how to use my telephone." - Bjarne Stroustrup
0 111

PHP-CLI, in PHP auf kill reagieren

Dennis
  • php
  1. 0
    Geplagter
    1. 0
      Dennis
  2. 1
    Tom
  3. 0
    Manuel B.
    1. 0
      Tom
      1. 0
        Manuel B.
      2. 0
        eddi
    2. 0
      Dennis
      1. 0
        Manuel B.
        1. 0
          Dennis
          1. 0
            Manuel B.
        2. 0
          eddi
          1. 0
            Manuel B.
    3. 2
      dedlfix
      1. 0
        Tom
        1. 0
          eddi
          1. 0
            Dennis
            1. 0
              Christian Seiler
              1. 0
                Dennis
                1. 0
                  Tom
                  1. 0
                    Christian Seiler
      2. 0

        Funktioniert, aber ich habs noch nicht ganz verstanden...

        Dennis
        1. 0
          Tom
          1. 0

            Noch eine Frage

            Dennis
            • webserver
            1. 0
              Tom
              1. 2
                Christian Seiler
                1. 0
                  Tom
                  1. 0
                    Christian Seiler
                    1. 0
                      Tom
                      1. 0

                        Break, CTRL-C, SIGINT, usw.

                        Tom
                        1. 0
                          Christian Seiler
                      2. 0
                        Christian Seiler
            2. 2
              Christian Seiler
              1. 0
                Dennis
                1. 0
                  Christian Seiler
                  1. 0
                    Dennis
                    1. 0
                      Christian Seiler
                      1. 0
                        eddi
                        1. 0
                          Christian Seiler
                          1. 0

                            sleep() vs. SIGSTOP

                            Dennis
                            1. 0
                              Christian Seiler
                              1. 0
                                Dennis
                                1. 0
                                  Christian Seiler
                      2. 0
                        Christian Seiler
          2. 0
            Tom
            1. 0
              Christian Seiler
              1. 0
                Tom
                1. 0
                  Christian Seiler
                  1. 0
                    Tom
                    1. 0
                      Christian Seiler
                      1. 0
                        Manuel B.
                        1. 0
                          Tom
                          1. 0
                            Christian Seiler
                          2. 0
                            Manuel B.
                      2. 0
                        Tom
                        1. 0
                          Christian Seiler
                          1. 0
                            Dennis
                            1. 1
                              Christian Seiler
        2. 1
          Christian Seiler
          1. 0
            Dennis
            1. 0
              eddi
              1. 0
                Dennis
                1. 0
                  Manuel B.
                  1. 0
                    eddi
                    1. 0
                      Manuel B.
                      1. 0
                        Dennis
                        1. 0
                          Manuel B.
                          1. 0
                            Dennis
                            1. 0
                              Manuel B.
                              1. 0
                                Dennis
                                1. 0
                                  Manuel B.
                                  1. 0
                                    Dennis
                                    1. 0
                                      Manuel B.
                  2. 0
                    Dennis
                    1. 0
                      Manuel B.
            2. 0
              Christian Seiler
              1. 0
                Dennis
                1. 0
                  Christian Seiler
                  1. 0
                    Dennis
  4. 0

    pcntl_fork() und posix_setsid(), was passiert da?

    Dennis
    1. 0
      Dennis
  5. 0

    Optimierung bzgl. Speicherauslastung bei mehreren Prozessen

    Dennis
    1. 0
      Christian Seiler
      1. 0
        Dennis
        1. 0
          eddi
          1. 0
            Dennis
            1. 0
              eddi
              1. 0
                Dennis
                1. 0
                  eddi
                  1. 0
                    Dennis
                    1. 0
                      eddi
      2. 0
        Manuel B.
        1. 0
          eddi
  6. 0

    exec() wartet nicht obwohl aufgerufenes Script sich forked

    Dennis
    1. 0
      eddi
    2. 0
      Christian Seiler
      1. 0
        Dennis
        1. 0
          Christian Seiler
          1. 0
            Christian Seiler
            1. 0
              Dennis
              1. 0
                Christian Seiler
                1. 0
                  Dennis
                  1. 0
                    Dennis
                    1. 0
                      Christian Seiler
                      1. 0

                        mod_auth_pam - Funktionsweise

                        Dennis
                        • webserver
                        1. 0
                          eddi
                          1. 0
                            Dennis
                            1. 0
                              Dennis
                              1. 0
                                eddi
                      2. 0

                        mod_authnz_external und pwauth

                        Dennis