[Gambas-user] Starting a Process and forgetting about it

Tobias Boege taboege at ...626...
Tue Aug 13 11:22:48 CEST 2013


On Tue, 13 Aug 2013, Beno?t Minisini wrote:
> Le 07/08/2013 10:08, Tobias Boege a ?crit :
> > Hi,
> >
> > in a project I need to start a server Process and watch its Kill event while
> > the program is running. The server shall, however, continue to run even
> > after my program exits.
> >
> > I'm kind of stuck here: If I create a Process, Gambas keeps watching it and
> > doesn't shutdown the program until the process dies. Can I somehow tell
> > Gambas to forget about that Process and just exit?
> >
> > I have used the Quit instruction until a minute ago (without any errors or
> > complaints) to get the program down ultimately but as I know this is a Bad
> > Idea: here's my mail.
> >
> > Now I'm working around this problem like that: I use the Shell instruction
> > to start a shell as the child process Gambas watches. I can safely kill the
> > shell which makes Gambas happy and reparents the server to init which is
> > also fine. I have either to document this workaround because IMHO it's quite
> > subtle or have an explicit way of having Gambas forget about a Process...
> >
> > Regards,
> > Tobi
> >
> 
> I added the Process.Ignore() method in revision #5791 for that. Tell me 
> if it works for you.
> 

The commit log tells that the process is automatically killed (not waited
for) when the Gambas program exits. This is not what I needed. It would be a
shorthand for something like this in the startup class:

---
Private $hProcess As Process

Public Sub Form_Close()
  Try $hProcess.Kill()
End

Public Sub btnStartProcess_Click()
  $hProcess = Shell "..." As "Process"
End
---

because you don't need to save the Process object anymore to have it killed.
You could now do:

---
Public Sub btnStartProcess_Click()
  Dim hProcess As Process

  hProcess = Shell "..." As "Process"
  hProcess.Ignore()
End

' Use Last in any "Process" events
---

Right? What I wanted to do is run a child process and if the Gambas program
exits, do nothing about the process and let init adopt it (the child shall
continue to run).

However, I don't think this is a common enough scenario to have it
implemented directly in the Process object. I got by by using Shell
"setsid ... &". Whereas automatically killing background child processes
seems to be a nice addition. Thanks for your effort anyway.

Regards,
Tobi




More information about the User mailing list