Desativando o modo monitor no Bash

0

Bash man lista sob set subsection a opção -m descrita assim:

Monitor mode. Job control is enabled. This option is on by default for interactive shells on systems that support it (see JOB CONTROL above). Background processes run in a separate process group and a line containing their exit status is printed upon their completion.

(Para encontrá-lo na página vinculada, procure por 'monitor mode', há apenas um hit.)

A questão é se esse modo pode ser efetivamente desativado durante uma sessão bash, como e com quais resultados esperados? Eu tenho tentado experimentar, mas até agora infrutífero.

Eu sei o comando set +m , mas o que é que ele deveria causar? Desligando o controle de trabalho? Silenciando as mensagens de finalização e término do trabalho?

    
por Tomasz 23.11.2016 / 15:08

2 respostas

4

set +m desativa o modo monitor (também conhecido como controle de tarefa), mas isso não tem muito efeito, e a maioria deles não são efeitos úteis. Quando um trabalho em segundo plano é iniciado com o modo monitor desativado, o trabalho não é elegível para fg e bg , e o shell não executa a impressão de uma mensagem ou executa traps SIGCLD quando o trabalho é interrompido ou é interrompido reiniciado.

A principal diferença útil é que o modo monitor faz com que os pipelines sejam executados em seu próprio grupo de processos . Essa é uma consideração útil quando você quer matar todo um grupo de processos. Se o modo monitor estiver desabilitado, matar o grupo de processos do shell também mata seus subprocessos; se estiver habilitado, cada pipeline será seu próprio grupo e poderá ser morto por grupo de forma independente.

bash-4.3$ set -m
bash-4.3$ sleep 1111 &
[1] 17526
bash-4.3$ set +m
bash-4.3$ sleep 2222 &
[2] 17527
bash-4.3$ ps -o pid,ppid,pgid,sid,cmd 17526 17527
  PID  PPID  PGID   SID CMD
17526 17525 17526  7773 sleep 1111
17527 17525 17525  7773 sleep 2222
    
por 24.11.2016 / 01:35
2

Para desativar o modo monitor, basta executar:

set +m

Por exemplo:

$ echo $SHELLOPTS
braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor
$ set +m
$ echo $SHELLOPTS
braceexpand:emacs:hashall:histexpand:history:interactive-comments
    
por 23.11.2016 / 15:15

Tags