Se eu executar este comando em um script, ele não produzirá saída, exceto o cabeçalho do ps
:
# Taken from Advanced Bash Usage on youtube:
echo "$(echo "$(echo "$(echo "$(ps wwf -s $$)")")")"
Esta é a saída:
$./testing.bash
PID TTY STAT TIME COMMAND
mas aqui ele é executado em um terminal que produz a saída esperada :
$echo "$(echo "$(echo "$(echo "$(ps wwf -s $$)")")")"
PID TTY STAT TIME COMMAND
18289 pts/4 Ss+ 0:00 /bin/bash
17917 pts/4 S+ 0:00 \_ /bin/bash
17918 pts/4 S+ 0:00 \_ /bin/bash
17919 pts/4 S+ 0:00 \_ /bin/bash
17920 pts/4 S+ 0:00 \_ /bin/bash
17921 pts/4 R+ 0:00 \_ ps wwf -s 18289
PERGUNTA:
Você pode explicar a diferença e me mostrar a maneira correta de fazer isso?
Já tentei muitas coisas e pesquisei no google por 4 horas, se precisar posso listar o que tentei mas acho que não é relevante aqui.
$echo $SHELL
/bin/bash
e:
$head -1 testing.bash
#!/bin/bash
ps
'-s sessionid
opção é selecionar processos com base em seu ID de sessão.Você pode usar
ps -j
para ver o id de sessão dos processos. Sessões junto com grupos de processos são geralmente usadas para controle de tarefas de shell (daí o-j
).Seu emulador de terminal cria uma nova sessão com o processo que ele reutiliza para executar seu shell preferido. Portanto, em um terminal, o id da sessão geralmente será o mesmo que o pid desse shell.
Portanto, se você executar nesse
ps -j -s "$$"
shell , obterá os processos na sessão porque é o mesmo que o ID da sessão."$$"
Se você executar esse comando em qualquer outro shell (como o shell que é executado em um processo filho para interpretar seu
testing
script), qualquer shell que não seja um líder de sessão, você não obterá nada porque não há sessão com um id que corresponda a o pid dessa concha.$$
é 7239, o líder da sessão. Então issops -j -s 7239
me dá todos os processos nessa sessão.O primeiro
ps
comando não retorna nada porque, comops
mostra o segundo, não há sessão com id 21044, pois o processo de id 21044 não é um líder de sessão. O líder da sessão ainda é 7239, o shell iniciado pelo emulador de terminal.Agora, vemos todos os processos na sessão. Costumávamos
ps -o sid= -p "$$"
obter o id da sessão à qual$$
pertence.