On 07/16/14 10:31, Philip Guenther wrote:
On Wed, Jul 16, 2014 at 2:53 AM, Gustav Fransson Nyvell
<[email protected] <mailto:[email protected]>> wrote:
On 07/15/14 23:55, Philip Guenther wrote:
On Tue, Jul 15, 2014 at 6:20 AM, Gustav Fransson Nyvell
<[email protected] <mailto:[email protected]>> wrote:
On 07/15/14 11:13, Peter Hessler wrote:
On 2014 Jul 15 (Tue) at 10:25:49 +0200 (+0200), Gustav
Fransson Nyvell wrote:
:On 07/15/14 09:48, Philip Guenther wrote:
:>When the process that's executing your .xinitrc exits,
startx/xinit
:>will shutdown the X server and then itself exit, taking
you back to
:>the non-X shell prompt. Your .xinitrc should end with
execution on
:>some program which will not exit until you want to exit
X; many
:>people have it be their window manager.
:>
:>This is described in the startx(1) manpage:
:> The .xinitrc is typically a shell script which
starts many clients
:> according to the user's preference. When this
shell script exits,
:> startx kills the server and performs any other
session
:>shutdown needed.
:> Most of the clients started by .xinitrc should
be run in the
:> background. The last client should run in the
foreground; when it
:> exits, the session will exit. People often
choose a session
:>manager,
:> window manager, or xterm as the ''magic'' client.
:>
:I know all of this. The problem is why does X lose
.xinitrc when
:.xinitrc (ksh) forks.
:
because the process you called stopped running.
It does not. If you mean daemon() I run it from inside a
fork() so the main process never exits. You're making me
uncertain so I will check this out better later.
So you're saying that the process that the .xinitrc ksh executes
calls fork() and the child of that fork() then calls daemon()?
If so, what does the *parent* of the fork(), the original
process executed by ksh, do after forking? It's child will exit
from the daemon() call, so if it calls wait() it won't block
long. Then what? Exit? If so, you've created a
self-backgrounding process (in a very complicated fashion) which
means it cannot be the process that keeps the .xinitrc script
from exiting.
Hm, no, .xinitrc itself is the process that calls fork etc since
it uses a lib that does this.
So let's try that question directly: what process (*not* program)
directly executed in the foreground by the .xinitrc script will
run and not exit until your X session is complete? The answer
CANNOT be "the child of this program which fork()s", because it
is the original process which matters. Nor can the answer be
"this program which calls daemon()", because the original process
exits then too.
Not a process in .xinitrc, .xinitrc itself.
I don't understand your answer. Since I apparently cannot guess what
you're doing, I'll suggest that you show it, such as by simply
including your complete .xinitrc.
Philip Guenther
couth. ~$ cat .xinitrc
urxvtd -o &
xrdb ~/.Xresources
echo $$
exec wmaker
--
This e-mail is confidential and may not be shared with anyone other than
recipient(s) without written permission from sender.