0

Ich habe folgenden Code:Wenn ich den Prozess beende, würde der Thread auch aufhören?

#!/usr/bin/python3 
import os 
import subprocess 
import time 
import threading 


class StartJar(threading.Thread): 
    def run(self): 
     os.system("java -jar <nazwa_appki>.jar") 

jarFileRun = StartJar   
current_location = subprocess.getoutput("pwd") 

while True: 
    x = subprocess.getstatusoutput("git checkout master && git reset --hard && git fetch && git pull") 
    if x[0] is 0: 
     os.system("git checkout master && git reset --hard && git fetch && git pull") 
     os.system("mvn clean package ~/your/path") 

     try: 
      process_pid = subprocess.check_output(['pgrep', '-f', 'tu_podaj_nazwe_procesu']).decode() 
     except subprocess.CalledProcessError as e: 
      print("pgrep failed because ({}):".format(e.returncode), e.output.decode()) 
     else: 
      try: 
       os.kill(int(process_pid), 9) 
       print('Process with ' + process_pid + ' PID was killed.') 
      except ProcessLookupError as e: 
       print("Process were old...") 
      except ValueError as e: 
       print("There is no such process!") 

     os.system("cp ~/your/path" + ' ' + current_location) 
     jarFileRun.start() 
    else: 
     print('No changes was made...') 

time.sleep(1800) 

Und ich frage mich, ob ich mein Prozess, der Thread läuft töten, wäre es auch in der Nähe? Wenn nicht, wie beende ich den Thread, um ihn mit neuen Änderungen, die für die Datei ausgeführt wurden, die ich ausführen möchte, noch einmal ausführen zu können? Ich habe versucht, in Google etwas zu finden, das den Thread stoppt, aber es hat nicht funktioniert, als ich es in die erste Zeile von while-Anweisung eingefügt habe.

+0

Ja. Die Lauffläche läuft innerhalb des Prozesses, wenn der Prozess stirbt, dann tut es auch den Faden darin. Aber das ist einfach genug, um sich selbst zu testen. – cdarke

+0

Warum führen Sie Java als Thread, warum nicht einfach als Hintergrundprozess? – cdarke

Antwort

0

Wenn Sie den Prozess beenden, werden alle diesem Prozess entsprechenden Threads beendet. Der Prozess wird weiterhin ausgeführt, wenn Sie einen der laufenden Threads beenden.

-1

Nein, es wird nicht beendet, weil der Wert daemon standardmäßig False ist und es bedeutet, dass der Thread nicht aufhört, wenn der Hauptprozess abgeschlossen ist, es ist völlig unabhängig. Wenn Sie jedoch den Daemon-Wert des Threads auf True setzen, wird er so lange ausgeführt, wie auch der Hauptprozess ausgeführt wird.

Um dies zu tun, können Sie Ihre StartJar Klasse löschen und jarFileRun wie folgt zu definieren:

jarFileRun = threading.Thread(target=os.system, args=("java -jar <nazwa_appki>.jar",), daemon=True) 

Oder machen Sie eine init-Definition in der Klasse für daemon

+0

Kann ich es zur run Funktion hinzufügen oder sollte ich __init__ hinzufügen? – Chrzanek

+0

Ich habe die Antwort aktualisiert –

Verwandte Themen