Subject: Re: bug#21617: Emacs compilation mode prevents child processes from spawning/forking daemons

From: Eli Zaretskii <[email-masked]>
Date: Mon, 05 Oct 2015 12:25:36 +0300

> Date: Mon, 5 Oct 2015 10:58:33 +0200
> From: Paul Pogonyshev <[email-masked]>
> 
> By comparison, when run from Emacs M-x compile, Gradle starts daemon every
> time, so all builds look like the first example above. However, if daemon
> already exists (e.g. created by console run above), it will not be killed.
> 
> File '~/.gradle/daemon/VERSION/daemon-PID.out.log' for daemons spawned after
> M-x compile ends with this line:
> 
> Daemon vm is shutting down... The daemon has exited normally or was terminated
> in response to a user interrupt.
> 
> When daemon is allowed to exist (e.g. when run from a normal console), log
> receives this message instead:
> 
> ... Daemon is idle, sleeping until state change or idle timeout at ...
> 
> Additionally, I checked several other ways to run process from Emacs:
> 
> * M-x eshell: daemon is killed, as with M-x compile
> * M-x shell: daemon works properly
> * M-!: daemon works properly
> 
> So, it seems that Emacs has a way to keep daemons alive / not kill them, but it
> is not used in compilation mode.

I just tried

  M-x compile RET C-a C-k emacs -Q -daemon RET

and that started a daemon which stayed up in the air and didn't exit
or get killed.  If you see the same on your system, then Gradle,
whatever that is, is indeed somehow involved in this, because without
it everything works as you expected.

Also, you didn't tell which version of Emacs you used (I used the
latest development sources).