On Tue, Jul 15, 2014 at 6:20 AM, Gustav Fransson Nyvell <[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.


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.


This e-mail is confidential and may not be shared with anyone other than
> recipient(s) without written permission from sender.
>

You should ask your legal department what they think that means other than
"we're idiots" when attached to messages to archived mailing lists.


Philip Guenther

Reply via email to