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 ./scriptworks for me. Maybe an xfce issue? – stefan Nov 10 '18 at 16:40xfce4-terminalorgnome-terminal. The point is thatnohuphas 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