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
.
xterm -e nohup ./script
works for me. Maybe an xfce issue? – stefan Nov 10 '18 at 16:40xfce4-terminal
orgnome-terminal
. The point is thatnohup
has to be putted in the script, we don't want all the script being affected bynohup
, but justcmd
. That said, it is interesting that it works in this case, without changing anything inside the script. – Glyph Nov 10 '18 at 17:06