Corinna Vinschen wrote:
On Mar 30 12:45, Daniel Pocock wrote:
Hi,
I'm using the execve call in a UNIX program (which works successfully),
and now I am testing it with Cygwin.
The program is using execve as a way to restart itself after receiving
SIGHUP.
The child process started by execve seems to be unable to work properly,
I observe various errors:
- DNS lookups fail
- binding to UDP sockets fails
Is that with Cygwin 1.5.25 or with Cygwin 1.7? If it's 1.5.25, could
you try if this still occurs under Cygwin 1.7?
I tried with both.
On 1.5.25, execve works, but the new process can't open sockets
On 1.7, the socket problem is gone, but there are other issues with
cygrunsrv
Does this only happen when started from a native Windows process (cmd.exe
or so) or does this also happen when started from Cygwin's bash?
Tested from Cygwin's bash, and as a service under cygrunsrv
Furthermore, I would like the process to become a service started by
cygrunsrv. Is it safe to use execve in a process started by cygrunsrv?
Did you try?
I have now had a chance to try it under cygrunsrv from Cygwin 1.5.25 and 1.7
Under 1.5.25, it doesn't work because of the sockets issue
Under 1.7, a new issue is revealed: execve doesn't maintain the same
process ID, so cygrunsrv thinks the service has actually stopped, and
the cygrunsrv process exits. This is obviously quite bad.
I tried to work around it by creating a PID file, and passing the -x
parameter to cygrunsrv. It seems that cygrunsrv only checks the PID
file when first started, and not after execve. A possible workaround
would be for cygrunsrv to check for a new PID file each time the process
exits.
This brings me to a few more questions:
- Can execve be implemented on Cygwin in such a way that the PID is
preserved? This would be the best solution for portability.
- Can cygrunsrv be enhanced to deal with this behaviour?
--
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
Problem reports: http://cygwin.com/problems.html
Documentation: http://cygwin.com/docs.html
FAQ: http://cygwin.com/faq/