Citando la documentazione di bash (da man bash):
JOB CONTROL
Job control refers to the ability to selectively stop
(suspend) the execution of processes and continue (resume)
their execution at a later point. A user typically employs
this facility via an interactive interface supplied jointly
by the operating system kernel's terminal driver and bash.
Quindi, in parole povere, avere set -m(il valore predefinito per le shell interattive) consente di utilizzare built-in come fge bg, che sarebbe disabilitato in set +m(valore predefinito per le shell non interattive).
Non è ovvio per me quale sia la connessione tra il controllo dei processi e l'uccisione dei processi in background all'uscita, tuttavia, posso confermare che ce n'è uno: l'esecuzione set -m; (sleep 10 ; touch control-on) &creerà il file se si esce dalla shell subito dopo aver digitato quel comando, ma set +m; (sleep 10 ; touch control-off) &non lo sarà.
Penso che la risposta risieda nel resto della documentazione per set -m:
-m Monitor mode. [...] Background pro‐
cesses run in a separate process group and a line con‐
taining their exit status is printed upon their comple‐
tion.
Ciò significa che i processi in background avviati set +mnon sono veri e propri "processi in background" ("I processi in background sono quelli il cui ID gruppo di processi differisce dal terminale"): condividono lo stesso ID gruppo di processi della shell che li ha avviati, piuttosto che avere il proprio gruppo di processi come i processi in background corretti. Questo spiega il comportamento osservato quando la shell si chiude prima di alcuni dei suoi processi in background: se capisco correttamente, quando si esce, un segnale viene inviato ai processi nello stesso gruppo di processi della shell (quindi uccidendo i processi in background iniziati sotto set +m), ma non a quelli di altri gruppi di processi (lasciando così da soli i veri processi in background avviati set -m).
Quindi, nel tuo caso, lo startup.shscript avvia presumibilmente un processo in background. Quando questo script viene eseguito in modo non interattivo, ad esempio tramite SSH come nella domanda a cui si è collegati, il controllo del lavoro viene disabilitato, il lavoro "in background" condivide il gruppo di processi della shell remota e viene quindi ucciso non appena la shell esce. Al contrario, abilitando il controllo del lavoro in quella shell, il lavoro in background acquisisce il proprio gruppo di processi e non viene ucciso quando la shell madre esce.
tomcat/bin/startup.shcorrelato afg/bg?