Eu estava um pouco confuso no início, pois command
é um comando interno do shell (ele executa um utilitário como um comando e não como, digamos, uma função de shell se essa função existir).
Você usa
$ utility &
para iniciar utility
como um processo assíncrono (processo / job em segundo plano).
Do manual bash
:
If a command is terminated by the control operator
&
, the shell executes the command in the background in a subshell. The shell does not wait for the command to finish, and the return status is 0.
Do manual dash
:
If a command is terminated by the control operator ampersand (
&
), the shell executes the command asynchronously -- that is, the shell does not wait for the command to finish before executing the next command.The format for running a command in background is:
command1 & [command2 & ...]
(isso é idêntico a a descrição POSIX de &
)
Alguns utilitários, geralmente daemons, podem ter sinalizadores que os deixam entrar em segundo plano e -D
pode ser um sinalizador comum para serem usados, mas também vi --daemon
ou -d
. Às vezes, -d
(ou qualquer sinalizador) impede que o utilitário se baseie, como sshd -d
, que impede que o processo do daemon SSH se baseie e, em vez disso, o executa como um processo em primeiro plano e envia todos os logs saída para saída padrão em vez de para syslog
(o -d
flag significa "debug" aqui).
No entanto, não há um padrão para esses sinalizadores e cada utilitário que oferece suporte a essas operações pode implementá-los por meio de diferentes sinalizadores. Você precisa ler o manual do utilitário específico com o qual está lidando.