Kill(): differenze tra le versioni

Da Gambas-it.org - Wikipedia.
Vai alla navigazione Vai alla ricerca
Nessun oggetto della modifica
Nessun oggetto della modifica
Riga 9: Riga 9:




Semplice esempio di uso in Gambas:
<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 19: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