Seite 1 von 1
Bei Consolenprogramm schliessen verhindern
Verfasst: 01.04.2019 17:16
von stevie1401
Ich habe ein Consolenprogramm geschrieben, muss aber leider feststellen, dass sich die Console bei strg+c schliesst.
Kann ich das irgendwie verhindern?
(Windows+Linux)
Re: Bei Consolenprogramm schliessen verhindern
Verfasst: 01.04.2019 17:45
von Kiffi
Wenn Dein Konsolenprogramm nur Ausgaben macht:
Mein Tipp wäre, eine Art "Shell" mit PB zu erstellen, mit der Du Dein Konsolenprogramm mittels RunProgram() aufrufst und dessen Ausgabe über ReadProgramString() in einem Fenster ausgeben lässt.
Dürfte sowohl für Windows als auch für Linux die einfachste Möglichkeit sein.
Re: Bei Consolenprogramm schliessen verhindern
Verfasst: 01.04.2019 18:07
von stevie1401
Alles klar, vielen Dank!
Re: Bei Consolenprogramm schliessen verhindern
Verfasst: 01.04.2019 18:11
von NicTheQuick
Ich hab mir das grad mal angeschaut und einen
C-Code übersetzt. Unter Linux kann man das SIGINT-Signal, das durch STRG+C ausgelöst wird, ganz einfach abfangen:
Code: Alles auswählen
Procedure term(signum.l)
PrintN("Got signal " + signum)
EndProcedure
Structure sigaction
*sa_handler
*sa_sigaction
sa_mask.l
sa_flags.l
*sa_restorer
EndStructure
Define action.sigaction
action\sa_handler = @term()
OpenConsole()
sigaction_(2, action, #Null)
Repeat
Print("What do you want? ")
Until Input() = "exit"
CloseConsole()
Mit "exit" kann man das Programm beenden, mit STRG+C geht es nicht.
Man kann auch jedes andere Signal als nur SIGINT=2 abfangen. Die Liste kriegt man im Terminal mit "kill -l" und sieht so aus:
Code: Alles auswählen
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
Re: Bei Consolenprogramm schliessen verhindern
Verfasst: 19.09.2020 17:34
von tft
Hallo,
es ist sicher schon mehr als ein Jahr her. Aber es würde mich interesieren wie der Code funktionieren soll?
Code: Alles auswählen
Procedure term(signum.l)
PrintN("Got signal " + signum)
EndProcedure
Structure sigaction
*sa_handler
*sa_sigaction
sa_mask.l
sa_flags.l
*sa_restorer
EndStructure
Define action.sigaction
action\sa_handler = @term()
OpenConsole()
sigaction_(2, action, #Null)
Repeat
Print("What do you want? ")
Until Input() = "exit"
CloseConsole()
den sigaction_(2, action, #Null) ist keine Funktion ... zumindestens nicht bei PB 5.72. Jemand ne Idee
Gruss TFT
Re: Bei Consolenprogramm schliessen verhindern
Verfasst: 19.09.2020 19:11
von mk-soft
Funktioniert unter Linux und macOS ...
So nicht unter Windows
Re: Bei Consolenprogramm schliessen verhindern
Verfasst: 19.09.2020 20:03
von mk-soft
Ich weiss nicht warum man bei windows das Signal wieder setzen muss.
Wenn man es nicht macht, führt es beim zweiten zum Ende.
Code: Alles auswählen
;-TOP
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
Import ""
signal(a, callback)
EndImport
CompilerEndIf
Structure sigaction
*sa_handler
*sa_sigaction
sa_mask.l
sa_flags.l
*sa_restorer
EndStructure
; ----
Procedure term(signum.i)
PrintN("Got signal " + signum)
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
signal(2, @term())
CompilerEndIf
EndProcedure
OpenConsole()
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
signal(2, @term())
CompilerElse
Define action.sigaction
action\sa_handler = @term()
sigaction_(2, action, #Null)
CompilerEndIf
Repeat
Print("What do you want? ")
Until Input() = "exit"
CloseConsole()
Re: Bei Consolenprogramm schliessen verhindern
Verfasst: 20.09.2020 16:28
von tft
sorry ... bei mir .... W10 mit PB 5.72 lässt sich der Close Bitton bei der Console nicht umgehen .....
Weiter Ideen ?
Gruss TFT