[Mono-dev] System.Unix.Native.Syscall.fork is commented out
Bojan Rajkovic
bojanr at brandeis.edu
Wed Sep 3 00:16:29 EDT 2008
> Hi all,
>
> I'm attempting to write a simple daemon in mono that should
> background
> itself after starting correctly. Essentially, it should fork() and
> then the parent should exit(0) while the child process continues.
>
> I've gotten this working with the (apparently now obsolete)
> Mono.Posix.Syscall class. However, in the newer
> Mono.Unix.Native.Syscall, we find this:
>
> #if false
> // fork(2)
> // pid_t fork(void);
> [DllImport (LIBC, SetLastError=true)]
> [Obsolete ("DO NOT directly call fork(2); it bypasses
> essential
> "shutdown code.\nUse
> System.Diagnostics.Process
> private static extern int fork ();
>
> // vfork(2)
> // pid_t vfork(void);
> [DllImport (LIBC, SetLastError=true)]
> [Obsolete ("DO NOT directly call vfork(2); it bypasses
> essential
> "shutdown code.\nUse
> System.Diagnostics.Process
> private static extern int vfork ();
> #endif
>
> Apparently, fork() was originally marked obsolete, then commented out
> completely.
>
> However, I don't understand the rationale here. It seems to me that
> fork() has nothing to do with shutdown, and thus cannot possibly
> bypass "essential shutdown code." On the other hand, Syscall.execve
> is *not* obsolete and *does* bypass shutdown code. Furthermore, the
> recommended System.Diagnostics.Process class provides no equivalent
> to
> fork(), so I'm not sure why it's being recommended.
>
> What's the rationale here?
>
> Thanks,
>
> Avery
Hi Avery,
I believe you can use mono-service and the usual Windows service stuff in the
ServiceProcess assembly. Check http://www.go-mono.com/docs/index.aspx?link=man%3Amono-service(1)
for more info, and hopefully someone will be able to give more detail than
I have.
Sincerely,
Bojan
More information about the Mono-devel-list
mailing list