Lin Xiang: Socket-Programmierung

Hallo,

ich habe eine Frage bezüglich PERL. Nämlich will ich einen Chat basierend auf Socket in PERL programmieren. Ich logge mich per Telnet (Putty) ein und will das Chatserver-Skript starten. Es funktioniert. Doch sobald ich mich aus Putty ausgeloggt habe, wird das Skript beendet. Wie kann ich so machen, dass der Chat-Server ständig läuft?

Viele Grüße.

  1. Hallo,

    ich habe eine Frage bezüglich PERL. Nämlich will ich einen Chat basierend auf Socket in PERL programmieren. Ich logge mich per Telnet (Putty) ein und will das Chatserver-Skript starten. Es funktioniert. Doch sobald ich mich aus Putty ausgeloggt habe, wird das Skript beendet. Wie kann ich so machen, dass der Chat-Server ständig läuft?

    Viele Grüße.

    wenn dein server ein linux sever ist dann richte dir start stop scripte ein. der programm start ist an deine konsole gebunden. wenn du die schliest beendest du auch das program.

    1. wenn dein server ein linux sever ist dann richte dir start stop >scripte ein. der programm start ist an deine konsole gebunden. wenn >du die schliest beendest du auch das program.

      Und wie mache ich das?

      Sorry, bin totaler Linux-Newbie

      1. Und wie mache ich das?

        Sorry, bin totaler Linux-Newbie

        ist nicht so einfach.
        habe aber noch eine andere idee.
        erstellen dir ein geschützten webbereich(.htaccess).
        hier nun cgi oder php scripte zum starten und zum stoppen des scriptes reinlegen.
        jetzt brauchst du ja nur noch über den browser die scripte aufrufen fertig.

        1. erstellen dir ein geschützten webbereich(.htaccess).
          hier nun cgi oder php scripte zum starten und zum stoppen des >scriptes reinlegen.
          jetzt brauchst du ja nur noch über den browser die scripte aufrufen >fertig.

          Ja, aber wenn ich Browserfenster schließe, wird doch das Script wieder beendet. Wie mache ich das denn nun mit Start und Stop Script?

          Viele Grüße.

          1. Hi,

            bei einer SSH-Session kannst Du ein beliebiges Programm einfach mittels & im Hintergrund laufen lassen, so das es nach Beendigung Deiner Session noch weiterläuft. Um unnötige Ausgabe auf Konsolenebene zu vermeiden hilft auch noch ein > /dev/null
            Das ganze könnte so aussehen

            perl meinscript.pl > /dev/null &

            Ciao, Stephan
            http://www.w3solutions.de

            1. bei einer SSH-Session kannst Du ein beliebiges Programm einfach mittels & im Hintergrund laufen lassen, so das es nach Beendigung Deiner Session noch weiterläuft. Um unnötige Ausgabe auf Konsolenebene zu vermeiden hilft auch noch ein > /dev/null
              Das ganze könnte so aussehen

              Danke erstmal, aber leider funktioniert es nicht. Sobald ich Putty beendet, wird auch das Script beendet.

              1. Hi Christian, danke für den Ratschlag (habe den erst jetzt gelesen), nun ich wollte mal fragen, ob es nun geht oder nicht. Und wenn nicht, wie ich das sonst machen kann!

                Viele Grüße.

                1. Hallo Lin Xiang,

                  Hi Christian, danke für den Ratschlag (habe den erst jetzt
                  gelesen), nun ich wollte mal fragen, ob es nun geht oder
                  nicht. Und wenn nicht, wie ich das sonst machen kann!

                  Natuerlich geht das. Die Loesung habe ich dir doch als direkte
                  Antwort zu deinem Ursprungs-Posting geschrieben :)

                  [pref:t=55126&m=307346]

                  Gruesse,
                   CK

                  --
                  http://cforum.teamone.de/
                  http://wishlist.tetekum.de/
                  If God had meant for us to be in the Army, we would have been born with green, baggy skin.
            2. Hallo Stephan-W3Sol,

              bei einer SSH-Session kannst Du ein beliebiges Programm
              einfach mittels & im Hintergrund laufen lassen,

              Korrekt -- und trotzdem bleibt es Mitglied der Prozessgruppe.

              so das es nach Beendigung Deiner Session noch weiterläuft.

              Tut es eben nicht.
              Sendest du ein ordentliches Logout, so wartet die Shell, die
              du durch deinen Login gestartet hast, ewig auf die
              Beendigung des Prozesses. Damit hast du einen Zombie
              erschaffen. Sendest du kein Logout, sondern kappst einfach
              die Verbindung, so wird auch der Prozess mit
              beendet -- gewaltsam, wenn noetig.

              Um unnötige Ausgabe auf Konsolenebene zu vermeiden hilft
              auch noch ein > /dev/null

              2>&1 > /dev/null waere sinnvoller gewesen.

              Gruesse,
               CK

              --
              http://cforum.teamone.de/
              http://wishlist.tetekum.de/
              If God had meant for us to be in the Army, we would have been born with green, baggy skin.
              1. Hallo Christian,

                bei einer SSH-Session kannst Du ein beliebiges Programm
                einfach mittels & im Hintergrund laufen lassen,
                Korrekt -- und trotzdem bleibt es Mitglied der Prozessgruppe.

                "man nohup"?

                Viele Grüße
                      Michael

                --
                T'Pol: I apologize if I acted inappropriately.
                V'Lar: Not at all. In fact, your bluntness made me reconsider some of my positions. Much as it has now.
                (sh:| fo:} ch:] rl:( br:^ n4:( ie:% mo:) va:| de:/ zu:| fl:( ss:) ls:~ js:|)
                Auch diese Signatur wird an korrekt konfigurierte Browser gzip-komprimiert übertragen.
                1. Hallo Michael,

                  bei einer SSH-Session kannst Du ein beliebiges
                  Programm einfach mittels & im Hintergrund laufen
                  lassen,
                  Korrekt -- und trotzdem bleibt es Mitglied der
                  Prozessgruppe.

                  "man nohup"?

                  Da hilft auch 'nohup' nicht viel :) SIGKILL kann nicht
                  abgefangen werden.

                  Gruesse,
                   CK

                  --
                  http://cforum.teamone.de/
                  http://wishlist.tetekum.de/
                  If God had meant for us to be in the Army, we would have been born with green, baggy skin.
  2. Hallo Lin Xiang,

    ich habe eine Frage bezüglich PERL. Nämlich will ich einen
    Chat basierend auf Socket in PERL programmieren. Ich logge
    mich per Telnet (Putty) ein

    Also eher per ssh ;)

    und will das Chatserver-Skript starten. Es funktioniert.

    Glueckwunsch.

    Doch sobald ich mich aus Putty ausgeloggt habe, wird das
    Skript beendet.

    Das liegt am Prozess-Management von Unix-Systemen. Dort wird
    bei deinem Login eine Shell gestartet. Alle Befehle, die du
    ausfuehrst, sind dann Teil-Prozesse in der Prozess-Gruppe,
    die diese Shell aufmacht -- also auch dein Chat-Server. Wird
    bei Unix-Systemen ein Root-Prozess beendet (in diesem Fall
    wird die Shell durch deinen Logout beendet), so werden auch
    alle Teilnehmer-Prozesse beendet. Was du tun musst, ist
    folgendes: Du musst dich aus der Prozess-Gruppe, die diese
    Shell eroeffnet hat, ausklinken. Das geht in zwei Schritten:
    zuerst musst du einen neuen Prozess erstellen, damit die
    Shell wieder benutzbar ist. Das machst du am besten mit
    fork(). Danach musst du den Eltern-Prozess beenden, per
    exit(). Im Kind-Prozess eroeffnest du per setsid() eine neue
    Prozess-Gruppe. Danach schliesst du STDIN, STDOUT und STDERR
    und bindest sie am besten an Log-Dateien. In Perl koennte das
    ganze so aussehen:

    use POSIX qw/setsid/;

    my $id = fork();
    die 'could not fork: '.$! unless defined $pid;

    exit if $pid;

    die 'couldt not setsid(): '.$! unless setsid();

    close STDIN;
    close STDOUT;
    close STDERR;

    open STDOUT,'>>'.$stdout_logfile or exit();
    open STDERR,'>>'.$stderr_logfile or exit();

    weiterer code....

    Gruesse,
     CK

    --
    http://cforum.teamone.de/
    http://wishlist.tetekum.de/
    If God had meant for us to be in the Army, we would have been born with green, baggy skin.