On 27 May 2002 20:22:48 +0200, Ulrich Fahrenberg wrote:
> 
> On Mon, 27 May 2002, Jukka Lehti wrote:
> 
> > AddToMenu "Utilities"
> > +              "Program Menu" Title
> > +              "xterm" Exec exec xterm &
> > +              "Mozilla" Exec exec mozilla &
> > +              "" Nop
> > +              "Applications" Popup Apps
> > +              "Utilities" Popup Utils
> 
> (Answering a question you didn't ask:) The & in your menu probably
> don't cause any trouble, but they are unnecessary, as ``Exec exec''
> already means that the shell is running the command in background and
> exits immediately.

The "&" is indead redudant here, but your explanation is not correct.
The only way to run something in the shell background is to specify "&".

Since this question is raised a lot, here is what actually happens.
Arrow actually means 2 operations: fork and exec in the forked process.

-----------------------------------------------------------------------
1) Exec xterm

  fvwm   ->   shell   ->   xterm
  pid=1       pid=2        pid=3

  Process table after 1 second: pid=1, pid=2, pid=3.

fvwm does not wait for shell, shell waits for xterm.
(Some shells like bash do optimizations here, automatically add "exec".)

-----------------------------------------------------------------------
2) Exec exec xterm

  fvwm   ->   shell  exec  xterm
  pid=1       pid=2        pid=2

  Process table after 1 second: pid=1, pid=2.

fvwm does not wait for shell, shell is replaced by xterm.

-----------------------------------------------------------------------
3) Exec xterm &

  fvwm   ->   shell   ->   shell   ->   xterm
  pid=1       pid=2        pid=3        pid=4

  Process table after 1 second: pid=1, pid=3, pid=4.

fvwm does not wait for shell, shell pid=2 forks because of "&" and
immediately exits. shell pid=3 waits for xterm.
(Many shells do optimizations here and behave just like in the case 4.)

-----------------------------------------------------------------------
4) Exec exec xterm &

  fvwm   ->   shell   ->   shell  exec  xterm
  pid=1       pid=2        pid=3        pid=3

  Process table after 1 second: pid=1, pid=3.

fvwm does not wait for shell, shell pid=2 forks because of "&" and
immediately exits. shell pid=3 is replaced by xterm.


You see, the most optimal is "Exec exec xterm".

Regards,
Mikhael.
--
Visit the official FVWM web page at <URL: http://www.fvwm.org/>.
To unsubscribe from the list, send "unsubscribe fvwm" in the body of a
message to [EMAIL PROTECTED]
To report problems, send mail to [EMAIL PROTECTED]

Reply via email to