Autor Tópico: Como terminar um programa chamado pelo shell script  (Lida 5138 vezes)

Offline Tota

  • Usuário Ubuntu
  • *
  • Mensagens: 14.982
    • Ver perfil
Como terminar um programa chamado pelo shell script
« Online: 10 de Agosto de 2007, 01:24 »
Olá a todos,

Passeando pelo forum para aprender um pouco mais me deparei com um topico que me chamou a atenção =>http://ubuntuforum-br.org/index.php/topic,22376.0.html

Resolvi então criar um script para rodar o som acoplado à minha placa de TV

Código: [Selecionar]

#/bin/sh
#
#Arquivo para configurar a placa PixelView PlayTV Mobile no Brasil
#Sistema PAL-M
#Por tota
#
       pccardctl eject # necessário para ejetar a placa PCMCIA para aplicar novas configurações
       pccardctl insert
         
          sudo rmmod tuner saa7134-alsa saa7134 #remove os módulos instalados no boot
          sudo modprobe saa7134 card=79 tuner=54 # Levanta a placa configurada
         
          sleep 1 # para dar tempo de se criar /dev/video

          tvtime | arecord -D hw:1,0 -r 32000 -c 2 -f S16_LE | aplay -  # Liga o som

[color=blue]#algo tem que ser feito aqui para terminar o tvtime e o alsa record[/color]

          sudo rmmod saa7134_alsa saa7134 #remove os módulos instalados

pccardctl eject

exit

#como fazer ele rodar sem o terminal?


Como podemos ver, eu invoco o tvtime e som via arecord e assisto a Tv com som e tudo.

Mas... quando eu dou um alt+F4 para encerrar o tvtime o script não prossegue.

Tenho que teclar ctrl C  para ele parar.

O que eu poderia fazer para para o tvtime e o arecord ?

Outras duas dúvidas relacionadas a meu script:

1) Na linha 10 por ex. eu invoco sudo rmmod.

gostaria que ele não pedisse senha para execução como usuário.

2) Depois que ele estiver rodando redondo, como eu faria para ele ser executado sem abrir um terminal.

A idéia é criar um ícone no desktop e ele abrir o tvtime com a placa de tv já configurada.

Como a placa é PCMCIA,  eu quero carregar os módulos somente quando a placa for inserida e depois retirar os modulos quando a placa for retirada.

Não queria deixar os módulos à toa carregados no meu modules, ou rc5.d ou modprobe.d etc. pois a placa é de pouco uso.

Estou lendo um pouco de programação em shell mas ainda estou muito cru no assunto.

[],s

ChausDevereaux

  • Visitante
Re: Como terminar um programa chamado pelo shell script
« Resposta #1 Online: 10 de Agosto de 2007, 11:09 »
Se você quer que o script prossiga, tem que executar o programa em segundo plano, com um '&' no final.
Exemplo:

Código: [Selecionar]
meu_script &
No modo gráfico isso é feito automaticamente. Só há dois modos de usar o sudo sem senha: ou você se adiciona ao grupo sudo:

Código: [Selecionar]
adduser meu_login sudo
Ou você executa o script como root. Para isso, adicione as seguintes linhas no começo do seu script:

Código: [Selecionar]
if [ $UID != 0 ]; then
               echo "Somente o root pode executar esse script."
               exit 1
         fi

Aí você pode rodar tudo de uma vez, usando
Código: [Selecionar]
sudo meu_script.

Eu acho que os módulos não usam muita memória.

Para terminar o alsa-record e o tvtime, acho que isso funciona:
Código: [Selecionar]
tvtime & pidtv=$! | arecord -D hw:1,0 -r 32000 -c 2 -f S16_LE & pidarecord=$! | aplay - & pidaplay=$!
wait $pidtv $pidarecord $pidaplay

Isso vai segurar os programas até que você termine de usar... mas eu não lembro se os três são tratados com um PID só... vou testar e te respondo quando puder.

Em tempo: PID quer dizer 'Process ID', identificação do processo. É um número único que identifica o programa que está rodando.

Offline s4suk3

  • Usuário Ubuntu
  • *
  • Mensagens: 78
    • Ver perfil
Re: Como terminar um programa chamado pelo shell script
« Resposta #2 Online: 10 de Agosto de 2007, 16:34 »
não é adduser, e sim gpasswd -a user grupo =x
O mais fácil de fazer o root sem senha é usando o visudo, dá uma procurada sobre sudo sem senha no google, tem uma maneira de utilizar um comando só sem senha, e o resto continuar com =)
Pentium 4 2.8ghz - 512 RAM DDR 400Mhz -  2 HDs 20gb 7200rpm IDE - Radeon 9200 PRO 128/64 - Arch Linux 2007.09 "Core Dump"
-
Humor, Linux, Software Livre e o resto :P
http://sryche.wordpress.com

Offline Tota

  • Usuário Ubuntu
  • *
  • Mensagens: 14.982
    • Ver perfil
Re: Como terminar um programa chamado pelo shell script
« Resposta #3 Online: 12 de Agosto de 2007, 09:41 »

Para terminar o alsa-record e o tvtime, acho que isso funciona:
Código: [Selecionar]
tvtime & pidtv=$! | arecord -D hw:1,0 -r 32000 -c 2 -f S16_LE & pidarecord=$! | aplay - & pidaplay=$!
wait $pidtv $pidarecord $pidaplay


Não funcionou não. O script continua travando depois da instrução => tvtime | arecord.......
Só no ctrl+C.

Tentei killall -I aplay e também não consegui matar o arecord/aplay.

[],s

Offline rjbgbo

  • Usuário Ubuntu
  • *
  • Mensagens: 3.889
  • Xubuntu 18.04LTS
    • Ver perfil
    • Twitter
Re: Como terminar um programa chamado pelo shell script
« Resposta #4 Online: 12 de Agosto de 2007, 10:32 »
Meu Deus Tota, espero um dia poder chegar a ousar fazer também um script.

Parabéns amigo.
Linux User #440843 | Ubuntu User #11469