Embora bash
em si não tenha o tipo "fila" ou "pilha" de controle de trabalho, mas eles têm controle de tarefa (que existe há anos, atrás de korn
shell do Unix Sistema V) em que você pode colocar os processos em segundo plano, e controlá-los com o comando kill
DIR:/coreutils
skolodya@ubuntu:$ gedit &> /dev/null &
[1] 26742
DIR:/coreutils
skolodya@ubuntu:$ gnome-terminal &> /dev/null &
[2] 26767
DIR:/coreutils
skolodya@ubuntu:$ jobs
[2] + Running gnome-terminal >/dev/null 2>&1
[1] - Running gedit >/dev/null 2>&1
DIR:/coreutils
skolodya@ubuntu:$ kill -SIGSTOP %1
DIR:/coreutils
skolodya@ubuntu:$ jobs
[1] + Stopped (signal) gedit >/dev/null 2>&1
[2] - Running gnome-terminal >/dev/null 2>&1
DIR:/coreutils
skolodya@ubuntu:$ kill -SIGCONT %1
DIR:/coreutils
skolodya@ubuntu:$ jobs
[1] + Stopped (signal) gedit >/dev/null 2>&1
[2] - Running gnome-terminal >/dev/null 2>&1
A saída desses comandos no exemplo acima vai para /dev/null
, mas é claro que se for um aplicativo de linha de comando, você deseja redirecionar a saída para algum lugar em que possa visualizá-lo mais tarde. Por exemplo, um named pipe
.
DIR:/coreutils
skolodya@ubuntu:$ mkfifo test.fifo
DIR:/coreutils
skolodya@ubuntu:$ apt-cache search 1> test.fifo &
[1] 27775
DIR:/coreutils
skolodya@ubuntu:$ cat test.fifo | head -n 3
screen - terminal multiplexer with VT100/ANSI terminal emulation
screen-dbg - Debugging symbols for GNU Screen
asic0x-dkms - iBurst USB modem driver in DKMS format
Aqui estou redirecionando stdout
(descritor de arquivo 1) para um canal que criei e revise-o mais tarde. Isso pode ser feito com vários comandos, criando vários pipes nomeados.
Nota lateral : pode-se escrever algo com essas opções, pelo menos IMHO, é mais fácil usar apenas esses métodos de controle de trabalho sozinhos.