- Labornetzteil AliExpress         
Seite 6 von 10 ErsteErste ... 45678 ... LetzteLetzte
Ergebnis 51 bis 60 von 94

Thema: pthread: was genau macht "joinable" und was macht "detached"?

  1. #51
    HaWe
    Gast
    Anzeige

    E-Bike
    Zitat Zitat von schorsch_76 Beitrag anzeigen
    @HaWe:

    man 3 pthread_kill

    Das bedeutet, das du nicht den thread töten kannst. Du rufst nur "kill" auf im Kontext des thread thread.
    das verstehe ich nicht:
    pthread_kill soll doch einen anderen thread killen - und du sagst, das tut es nicht?

  2. #52
    Erfahrener Benutzer Roboter-Spezialist Avatar von schorsch_76
    Registriert seit
    25.03.2012
    Ort
    Kurz vor Neuschwanstein
    Alter
    48
    Beiträge
    456
    Zitat Zitat von HaWe Beitrag anzeigen
    das verstehe ich nicht:
    pthread_kill soll doch einen anderen thread killen - und du sagst, das tut es nicht?
    Nein, das tut es nicht. Wenn du SIGKILL sendest, wird der ganze Prozess getötet. Das sagt die Dokumentaton zur API. man 3 pthread_kill. SIGKILL kann nicht geblockt werden.

  3. #53
    HaWe
    Gast
    und wie geht es dann richtig, so wie beabsichtigt?

  4. #54
    Erfahrener Benutzer Roboter-Spezialist Avatar von schorsch_76
    Registriert seit
    25.03.2012
    Ort
    Kurz vor Neuschwanstein
    Alter
    48
    Beiträge
    456
    https://en.wikipedia.org/wiki/Signal_(IPC)#SIGKILL

    Zitat Zitat von wikipedia
    SIGKILL
    The SIGKILL signal is sent to a process to cause it to terminate immediately (kill). In contrast to SIGTERM and SIGINT, this signal cannot be caught or ignored, and the receiving process cannot perform any clean-up upon receiving this signal. The following exceptions apply:

    Zombie processes cannot be killed since they are already dead and waiting for their parent processes to reap them.
    Processes that are in the blocked state will not die until they wake up again.
    The init process is special: It does not get signals that it does not want to handle, and thus it can ignore SIGKILL.[6] An exception from this exception is while init is ptraced on Linux.[7][8]
    An uninterruptibly sleeping process may not terminate (and free its resources) even when sent SIGKILL. This is one of the few cases in which a UNIX system may have to be rebooted to solve a temporary software problem.

    SIGKILL is used as a last resort when terminating processes in most system shutdown procedures if it does not voluntarily exit in response to SIGTERM. To speed the computer shutdown procedure, Mac OS X 10.6, aka Snow Leopard, will send SIGKILL to applications that have marked themselves "clean" resulting in faster shutdown times with, presumably, no ill effects.[9] The command killall -9 has a similar, while dangerous effect, when executed e.g. in Linux; it doesn't let programs save unsaved data. It has other options, and with none, uses the safer SIGTERM signal.
    - - - Aktualisiert - - -

    Wie es richtig geht, zeigt mein Beispiel: Du kannst einen Thread nicht töten. Du kannst ihn nur so programmieren dass du ihn im jeden Fall sauber beenden kannst (join). Wenn das keine Option ist, geht nur der Subprozess den du mit SIGKILL immer töten kannst.

  5. #55
    HaWe
    Gast
    deinen Code verstehe ich leider überhaupt nicht - was macht der in einfachen Worten?

    PS
    was meinst du mit "Subprozess" den ich "immer töten kann" ?

  6. #56
    Erfahrener Benutzer Roboter-Spezialist Avatar von schorsch_76
    Registriert seit
    25.03.2012
    Ort
    Kurz vor Neuschwanstein
    Alter
    48
    Beiträge
    456
    Ich würde alle deine Threads als Subprozesse ausführen und mit ihnen mit Pipes, socketpair, posix mq oder was auch immer reden. Dann kannst du jeden deiner Prozesse abschießen und neu starten.

    - - - Aktualisiert - - -

    Er startet einen Subprozess per fork(), Sendet den Subprozess über eine pipe eine int Zahl. Der Subprozess ließt diese Zahl von der Pipe. Würfelt, bei 6 simuliert der Subprozess ein wait_forever(), bei 7 eine anormale Programmterminierung und in jedem anderen Fall schickt er es über die zweite Pipe zurück.

    Das wiederholt sich endlos.

  7. #57
    HaWe
    Gast
    ich verstehe folgende Dinge nicht:
    Subprozess
    worker
    Pipes
    socketpair
    posix mq
    fork
    wait_forever()

    daher denke ich, das ist 2 Nummern zu schwierig für mich.
    Da ich deinen Code nicht verstehe, kann ich auch meinen Code nicht anpassen und umschreiben, leider...

    Es soll nun mal ein Thread, der irgendwie geblockt ist oder sich aufgehängt hat warum auch immer (hängt quasi in 1 Programmzeile fest, ohne dass er seine loop- (while() )-Scheife weiter durchläuft), einzeln beendet werden, ohne die Stabilität meines Programms zu stören, und dann soll er neu gestartet werden.

  8. #58
    Erfahrener Benutzer Roboter-Spezialist Avatar von schorsch_76
    Registriert seit
    25.03.2012
    Ort
    Kurz vor Neuschwanstein
    Alter
    48
    Beiträge
    456
    Hast du meine Code übersetzt bekommen?

  9. #59
    HaWe
    Gast
    habe ich ehrlich gesagt noch gar nicht probiert, denn ich weiß noch gar nicht, was da passiert und ob ich es nutzen kann.
    Der Code von dir müsste in mein Beispiel eingesetzt werden, für meine Arduino-Raspi-UART-Kommunikation damit es für mich Sinn macht...

  10. #60
    Erfahrener Benutzer Roboter-Spezialist Avatar von schorsch_76
    Registriert seit
    25.03.2012
    Ort
    Kurz vor Neuschwanstein
    Alter
    48
    Beiträge
    456
    Subprozess: Wenn du in der bash ein Program startest, ist das Program ein Subprozess deiner bash
    worker, ein name für den Subprozess. Er soll einfach Arbeit verrichten

    Alles IPC (Inter Prozess Kommunikation)
    Pipes
    socketpair
    posix mq

    fork(): Startet einen Subprozess. Siehe oben
    wait_forever(): Das simuliert deinen hängenden Prozess der auf nichts anderes mehr reagiert.

Seite 6 von 10 ErsteErste ... 45678 ... LetzteLetzte

Ähnliche Themen

  1. Antworten: 10
    Letzter Beitrag: 01.11.2017, 13:53
  2. Antworten: 2
    Letzter Beitrag: 15.06.2011, 22:18
  3. "Optimization" macht debuggen schwer
    Von yaro im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 05.02.2010, 21:40
  4. "Soft-Reset?" und "Finger-Interrupt?"
    Von trapperjohn im Forum Asuro
    Antworten: 8
    Letzter Beitrag: 11.06.2008, 00:02
  5. ASM: was machen "swap" und "cbr" genau?
    Von RHS im Forum AVR Hardwarethemen
    Antworten: 3
    Letzter Beitrag: 18.08.2004, 18:16

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen