Differenze tra le versioni di "Kill()"
Riga 9: | Riga 9: | ||
− | + | <BR>In questo esempio si provvederà a chiudere un programma esterno ("Gedit"), aperto con l'istruzione "Shell" e di cui si gestisce il processo con le risorse della Classe "Process": | |
Private Const SIGKILL As Integer = 9 | Private Const SIGKILL As Integer = 9 | ||
Private hp As Process | Private hp As Process | ||
Riga 31: | Riga 31: | ||
hp.Close | hp.Close | ||
+ | |||
+ | '''End''' | ||
+ | |||
+ | |||
+ | Oppure volendo chiudere la stessa applicazione Gambas: | ||
+ | Private Const SIGKILL As Integer = 9 | ||
+ | |||
+ | <FONT color=Gray>' ''int kill(int pid, int signal)''</font> | ||
+ | Private <FONT color=#B22222>Extern kill_C</font>(pid As Integer, signal As Integer) As Integer In "<FONT color=#B22222>libc:6</font>" <FONT color=#B22222>'''Exec "kill"'''</font> | ||
+ | |||
+ | |||
+ | '''Public''' Sub Menu() | ||
+ | |||
+ | While True | ||
+ | If i == 300 Then <FONT color=#B22222>kill_C(Application.Handle, SIGKILL)</font> | ||
+ | Inc i | ||
+ | Print i | ||
+ | Wait 0.01 | ||
+ | Wend | ||
'''End''' | '''End''' |
Versione delle 18:49, 4 dic 2021
La funzione della libreria di C
int kill(int pid, int signal);
è una chiamata di sistema che invia un segnale a un processo, inividuato dal suo PID e contenuto nel parametro pid. Se pid è maggiore di zero, il segnale viene inviato al processo avente l'ID di processo uguale al parametro pid. Se pid è 0, il segnale viene inviato a tutti i processi, tranne i processi di sistema.
Volendola utilizzare in Gambas, bisognerà dichiararla con Extern, nonché dichiarare la libreria di C: libc.so.6, nella quale la funzione è contenuta. Da sottolineare che, poiché questa funzione esterna di C "kill" è omonima alla funzione di Gambas "Kill", bisognerà assegnarle un nome a piacere, ma si dovrà anche richiamare il suo vero nome con il comando Exec.
Dunque avremo ad esempio:
Private Extern kill_C(pid As Integer, signal As Integer) As Integer In "libc:6" Exec "kill"
In questo esempio si provvederà a chiudere un programma esterno ("Gedit"), aperto con l'istruzione "Shell" e di cui si gestisce il processo con le risorse della Classe "Process":
Private Const SIGKILL As Integer = 9 Private hp As Process ' int kill(int pid, int signal) Private Extern kill_C(pid As Integer, signal As Integer) As Integer In "libc:6" Exec "kill" Public Sub Form_Open() ' Viene lanciato il programma editor di testo "Gedit": hp = Shell "gedit" End Public Sub Button1_Click() ' Chiudiamo il programma "gedit" mediante la funzione "kill()" di C: kill_C(hp.Handle + 1, SIGKILL) hp.Close End
Oppure volendo chiudere la stessa applicazione Gambas:
Private Const SIGKILL As Integer = 9 ' int kill(int pid, int signal) Private Extern kill_C(pid As Integer, signal As Integer) As Integer In "libc:6" Exec "kill" Public Sub Menu() While True If i == 300 Then kill_C(Application.Handle, SIGKILL) Inc i Print i Wait 0.01 Wend End