Skip to content

Commit a51ce4f

Browse files
authored
Merge pull request #29 from PayalLakra/bio_amptool
Running app. exit by pressing ctrl C
2 parents 7765b66 + 095d0c8 commit a51ce4f

File tree

1 file changed

+24
-4
lines changed

1 file changed

+24
-4
lines changed

app.py

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ def start_lsl():
2727
try:
2828
# Start the LSL stream as a subprocess
2929
if sys.platform == "win32":
30-
lsl_process = subprocess.Popen(["python", "chords.py", "--lsl"],stdout=subprocess.PIPE,stderr=subprocess.PIPE, creationflags=subprocess.CREATE_NO_WINDOW)
30+
lsl_process = subprocess.Popen(["python", "chords.py", "--lsl"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, creationflags=subprocess.CREATE_NO_WINDOW)
3131
else:
3232
lsl_process = subprocess.Popen(["python", "chords.py", "--lsl"],stdout=subprocess.PIPE,stderr=subprocess.PIPE)
3333
output = lsl_process.stderr.readline().decode().strip() # Read the initial stderr line
@@ -79,18 +79,38 @@ def app_status():
7979

8080
@app.route("/stop_lsl", methods=['POST'])
8181
def stop_lsl():
82+
stop_all_processes()
83+
return jsonify({'status': 'LSL Stream and applications stopped and server is shutting down.'})
84+
85+
def stop_all_processes():
86+
global lsl_process, app_processes
87+
8288
# Terminate LSL process
8389
if lsl_process and lsl_process.poll() is None:
8490
lsl_process.terminate()
91+
try:
92+
lsl_process.wait(timeout=3)
93+
except subprocess.TimeoutExpired:
94+
lsl_process.kill()
8595

8696
# Terminate all app processes
8797
for app_name, process in app_processes.items():
8898
if process.poll() is None:
8999
process.terminate()
100+
try:
101+
process.wait(timeout=3)
102+
except subprocess.TimeoutExpired:
103+
process.kill()
90104

91-
# Shutdown the server gracefully
92-
os._exit(0)
93-
return jsonify({'status': 'LSL Stream and applications stopped and server is shutting down.'})
105+
app_processes.clear()
106+
print("All processes terminated.")
107+
108+
def handle_sigint(signal_num, frame):
109+
print("\nCtrl+C pressed! Stopping all processes...")
110+
stop_all_processes()
111+
sys.exit(0)
112+
113+
signal.signal(signal.SIGINT, handle_sigint) # Register signal handler for Ctrl+C
94114

95115
if __name__ == "__main__":
96116
app.run(debug=True)

0 commit comments

Comments
 (0)