I'm using a bash script `script.sh` containing a command `cmd`, launched in background:

```
#!/bin/bash
…
cmd &
…

```

If I open a terminal emulator and run `script.sh`, `cmd` is properly executed in background, as expected. That is, while `script.sh` has ended, `cmd` continues to run in background, with PPID 1.

But, if I open another terminal emulator (let say xfce4-terminal) from the previous one (or at the beginning of desktop session, which is my real use case), and execute `script.sh` by

```
xfce4-terminal -H -x script.sh

```

`cmd` is not properly executed anymore: It is killed by the termination of `script.sh`. Using `nohup` to prevent this is not sufficient. I am obliged to put a `sleep` command after it, otherwise `cmd` is killed by the termination of `script.sh`, before being dissociated from it.

The only way I found to make `cmd` properly execute in background is to put `set -m` in `script.sh`. Why is it necessary in this case, and not in the first one? Why this difference in behaviour between the two ways of executing `script.sh` (and hence `cmd`)?

I assume that, in the first case, monitor mode is *not* activated, as one can see by putting `set -o` in `script.sh`.