Como abrir e fechar um processo dentro de um shell

1. Como abrir e fechar um processo dentro de um shell

WALDECIR JOSE DA SILVA FILHO
Dlnh0

(usa Red Hat)

Enviado em 18/07/2019 - 14:44h

Olá galera,
Não sei se existe algo do tipo, já pesquisei um bom tanto , mas não achei nada!
É o seguinte, preciso criar um shell que me permita rodar um determinado processo, porém esse processo fica rodando constantemente, então eu queria fechar ele com o ctrl+c e continuar executando o resto dos comandos do shell.. Segue o exemplo abaixo:


ps -C ping 172.16.77.17 > /dev/null
if [ $? = 0 ]
then
echo 'O programa está rodando! Deseja rodar manualmente? y/n'
read RESP
else
echo 'A bagaça não ta rodando! Deseja rodar manualmente? y/n '
read RESP
fi
if [ $RESP = "y" ]
then
pkill ping
echo 'programa interrompido. Iniciando na sua máquina!'
ping 172.16.77.17 # Aqui seria o tal processo que eu queria manter ele rodando até achar necessário e quando quisesse parar dar um ctrl+c e continuar com #os comandos abaixo ⬇ , com o ping funciona, mas com um arquivo que eu fico escrevendo um log por exemplo, não funfa..
Echo 'Mensagem dps do ctrl+c!'
#resto dos comandos
else
echo 'Saindo!'
fi
exit


  


2. Re: Como abrir e fechar um processo dentro de um shell

tmp
tmp

(usa Ubuntu)

Enviado em 18/07/2019 - 15:07h

Dlnh0 escreveu:

Olá galera,
Não sei se existe algo do tipo, já pesquisei um bom tanto , mas não achei nada!
É o seguinte, preciso criar um shell que me permita rodar um determinado processo, porém esse processo fica rodando constantemente, então eu queria fechar ele com o ctrl+c e continuar executando o resto dos comandos do shell.. Segue o exemplo abaixo:


ps -C ping 172.16.77.17 > /dev/null
if [ $? = 0 ]
then
echo 'O programa está rodando! Deseja rodar manualmente? y/n'
read RESP
else
echo 'A bagaça não ta rodando! Deseja rodar manualmente? y/n '
read RESP
fi
if [ $RESP = "y" ]
then
pkill ping
echo 'programa interrompido. Iniciando na sua máquina!'
ping 172.16.77.17 # Aqui seria o tal processo que eu queria manter ele rodando até achar necessário e quando quisesse parar dar um ctrl+c e continuar com #os comandos abaixo ⬇ , com o ping funciona, mas com um arquivo que eu fico escrevendo um log por exemplo, não funfa..
Echo 'Mensagem dps do ctrl+c!'
#resto dos comandos
else
echo 'Saindo!'
fi
exit


Basta usar & no fim do script que roda em segundo plano


3. Re: Como abrir e fechar um processo dentro de um shell

WALDECIR JOSE DA SILVA FILHO
Dlnh0

(usa Red Hat)

Enviado em 18/07/2019 - 15:22h

Mas esse é o problema bro.. eu preciso que rode em primeiro plano.. : /


4. Re: Como abrir e fechar um processo dentro de um shell

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 18/07/2019 - 15:42h


Dlnh0 escreveu:

Olá galera,
Não sei se existe algo do tipo, já pesquisei um bom tanto , mas não achei nada!
É o seguinte, preciso criar um shell que me permita rodar um determinado processo, porém esse processo fica rodando constantemente, então eu queria fechar ele com o ctrl+c e continuar executando o resto dos comandos do shell.. Segue o exemplo abaixo:


ps -C ping 172.16.77.17 > /dev/null
if [ $? = 0 ]
then
echo 'O programa está rodando! Deseja rodar manualmente? y/n'
read RESP
else
echo 'A bagaça não ta rodando! Deseja rodar manualmente? y/n '
read RESP
fi
if [ $RESP = "y" ]
then
pkill ping
echo 'programa interrompido. Iniciando na sua máquina!'
ping 172.16.77.17 # Aqui seria o tal processo que eu queria manter ele rodando até achar necessário e quando quisesse parar dar um ctrl+c e continuar com #os comandos abaixo ⬇ , com o ping funciona, mas com um arquivo que eu fico escrevendo um log por exemplo, não funfa..
Echo 'Mensagem dps do ctrl+c!'
#resto dos comandos
else
echo 'Saindo!'
fi
exit

Boa tarde Dinho.
O comando:
ps -C ping 172.16.77.17 > /dev/null 

Acusa erro....
Primeiro de o comando, depois
ps -C ping
Reveja o Condicional, a lógica está 'estranha'
VEJA => echo -e "$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')"
Att.: Marcelo Oliver


5. Re: Como abrir e fechar um processo dentro de um shell

WALDECIR JOSE DA SILVA FILHO
Dlnh0

(usa Red Hat)

Enviado em 19/07/2019 - 09:24h

msoliver escreveu:


Dlnh0 escreveu:

Olá galera,
Não sei se existe algo do tipo, já pesquisei um bom tanto , mas não achei nada!
É o seguinte, preciso criar um shell que me permita rodar um determinado processo, porém esse processo fica rodando constantemente, então eu queria fechar ele com o ctrl+c e continuar executando o resto dos comandos do shell.. Segue o exemplo abaixo:


ps -C ping 172.16.77.17 > /dev/null
if [ $? = 0 ]
then
echo 'O programa está rodando! Deseja rodar manualmente? y/n'
read RESP
else
echo 'A bagaça não ta rodando! Deseja rodar manualmente? y/n '
read RESP
fi
if [ $RESP = "y" ]
then
pkill ping
echo 'programa interrompido. Iniciando na sua máquina!'
ping 172.16.77.17 # Aqui seria o tal processo que eu queria manter ele rodando até achar necessário e quando quisesse parar dar um ctrl+c e continuar com #os comandos abaixo ? , com o ping funciona, mas com um arquivo que eu fico escrevendo um log por exemplo, não funfa..
Echo 'Mensagem dps do ctrl+c!'
#resto dos comandos
else
echo 'Saindo!'
fi
exit

Boa tarde Dinho.
O comando:
ps -C ping 172.16.77.17 > /dev/null 

Acusa erro....
Primeiro de o comando, depois
ps -C ping
Reveja o Condicional, a lógica está 'estranha'
VEJA => echo -e "$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')"
Att.: Marcelo Oliver


Então brother acho que não fui muito claro, desculpe.. Sou novato no assunto..
No meu trabalho a gnt tem um "migrador" que faz a migração de dados de uma base pra outra.

Dei um file nele pra vcs entenderem (migrador: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), not stripped).

Esse migrador fica rodando infinitamente e sobe pelo crontab caso alguém o mate .
Quando a galera roda na mão sem verificar se já estava rodando, ou esquecem de matar e comentar o crontab antes de rodar, acaba por duplicar os dados.(rodam na mão pra verificar se há erros.)
-E não posso mexer no migrador, nem impedir a galera de rodar ele na mão-.
Por isso estou tentando criar algo que valide automaticamente se já está rodando.
mate o migrador
comente o crontab
roda na mão o migrador, e após o ctrl+c rode o abaixo
"descomenta" crontab

#!/bin/sh

ps aux| grep "[.]/migrador" > /dev/null # Esse eu uso pra verificar se ta rodando
if [ $? = 0 ]
then
echo 'O programa está rodando! Deseja rodar manualmente? y/n'
read RESP
else
echo 'A bagaça não ta rodando! Deseja rodar manualmente? y/n '
read RESP
fi
if [ $RESP = "y" ]
then
sed -i "/${f_2}.sh/s/^.*$/#&/" /var/spool/cron/root #comento ele no crontab
pkill -f "migrador" # mato se estiver rodando
cd /home/exec # entro na pasta
exec ./migrador # executa no terminal de quem rodar, a galera só sabe sair do migrador com o ctrl+c
#Por isso eu queria que após sair do exec acima pulasse pro comando abaixo que descomenta o crontab pra subir automáticamente
sed -i "/migrador/s/.//" /var/spool/cron/root #descomenta crontab
echo 'Essa mensagem era pra aparecer depois do ctrl+c!'

else
echo 'Saindo!'
fi
exit


Desde já agradeço a todos pela atenção..






6. Re: Como abrir e fechar um processo dentro de um shell

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 21/07/2019 - 17:46h


Dlnh0 escreveu:

msoliver escreveu:


Dlnh0 escreveu:

Olá galera,
Não sei se existe algo do tipo, já pesquisei um bom tanto , mas não achei nada!
É o seguinte, preciso criar um shell que me permita rodar um determinado processo, porém esse processo fica rodando constantemente, então eu queria fechar ele com o ctrl+c e continuar executando o resto dos comandos do shell.. Segue o exemplo abaixo:


ps -C ping 172.16.77.17 > /dev/null
if [ $? = 0 ]
then
echo 'O programa está rodando! Deseja rodar manualmente? y/n'
read RESP
else
echo 'A bagaça não ta rodando! Deseja rodar manualmente? y/n '
read RESP
fi
if [ $RESP = "y" ]
then
pkill ping
echo 'programa interrompido. Iniciando na sua máquina!'
ping 172.16.77.17 # Aqui seria o tal processo que eu queria manter ele rodando até achar necessário e quando quisesse parar dar um ctrl+c e continuar com #os comandos abaixo ? , com o ping funciona, mas com um arquivo que eu fico escrevendo um log por exemplo, não funfa..
Echo 'Mensagem dps do ctrl+c!'
#resto dos comandos
else
echo 'Saindo!'
fi
exit

Boa tarde Dinho.
O comando:
ps -C ping 172.16.77.17 > /dev/null 

Acusa erro....
Primeiro de o comando, depois
ps -C ping
Reveja o Condicional, a lógica está 'estranha'
VEJA => echo -e "$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')"
Att.: Marcelo Oliver


Então brother acho que não fui muito claro, desculpe.. Sou novato no assunto..
No meu trabalho a gnt tem um "migrador" que faz a migração de dados de uma base pra outra.

Dei um file nele pra vcs entenderem (migrador: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), not stripped).

Esse migrador fica rodando infinitamente e sobe pelo crontab caso alguém o mate .
Quando a galera roda na mão sem verificar se já estava rodando,
ou esquecem de matar e comentar o crontab antes de rodar,
acaba por duplicar os dados.(rodam na mão pra verificar se há erros.)
-E não posso mexer no migrador, nem impedir a galera de rodar ele na mão-.
Por isso estou tentando criar algo que valide automaticamente se já está rodando.
mate o migrador
comente o crontab
roda na mão o migrador, e após o ctrl+c rode o abaixo
"descomenta" crontab

#!/bin/sh

ps aux| grep "[.]/migrador" > /dev/null # Esse eu uso pra verificar se ta rodando
if [ $? = 0 ]
then
echo 'O programa está rodando! Deseja rodar manualmente? y/n'
read RESP
else
echo 'A bagaça não ta rodando! Deseja rodar manualmente? y/n '
read RESP
fi
if [ $RESP = "y" ]
then
sed -i "/${f_2}.sh/s/^.*$/#&/" /var/spool/cron/root #comento ele no crontab
pkill -f "migrador" # mato se estiver rodando
cd /home/exec # entro na pasta
exec ./migrador # executa no terminal de quem rodar, a galera só sabe sair do migrador com o ctrl+c
#Por isso eu queria que após sair do exec acima pulasse pro comando abaixo que descomenta o crontab pra subir automáticamente
sed -i "/migrador/s/.//" /var/spool/cron/root #descomenta crontab
echo 'Essa mensagem era pra aparecer depois do ctrl+c!'

else
echo 'Saindo!'
fi
exit


Desde já agradeço a todos pela atenção..

Boa tarde DinhO.
Segue:
#!/bin/bash
# CAPTURA "CTRL+C"
trap 'CTRL_C' SIGINT #Ao pressionar CTRL+C, Executa a função CTRL_C

PERGUNTA() {
#Se Responder algo diferente de [YyNn], pergunta novamente.....
#Respondendo "corretamente", transforma em maiúscula para facilitar a avaliação;
read -p "Deseja rodar manualmente? [YN]: " -e -n1 RESP
[[ $RESP != +(y|Y|n|N) ]] && PERGUNTA || RESP=${RESP^}
}

CTRL_C() {
printf "\n Control-C CAPTURADO! \n Crontab será \"DESCOMENTADO\"\n"
sed -i "/migrador/s/.//" /var/spool/cron/root #descomenta crontab
wait
printf "\n Essa mensagem aparecerá depois do ctrl+c! \n Saindo\n"
exit 0;
}

clear;
if (( $(pgrep -c "\./migrador") > 0 ));then #pgrep substitui ps aux|grep.......
printf "\n O programa está rodando! \n"
PERGUNTA
if [[ ${RESP} = "Y" ]];then
sed -i "/${f_2}.sh/s/^.*$/#&/" /var/spool/cron/root #comento ele no crontab
pkill -f "migrador" # mato o processo
cd /home/exec # entro na pasta
exec ./migrador
else
printf "\nSaindo\n"
exit 0;
fi
else #Partindo da afirmação que o programa sempre estará "rodando", acredito que esta parte é desnecessária.... Mas....
printf "\nO programa não está rodando!\n"
PERGUNTA
if [[ ${RESP} = "Y" ]];then
cd /home/exec # entro na pasta
exec ./migrador
else
printf "\nSaindo\n"
exit 0;
fi
fi


Importante => echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver


7. Re: Como abrir e fechar um processo dentro de um shell

WALDECIR JOSE DA SILVA FILHO
Dlnh0

(usa Red Hat)

Enviado em 22/07/2019 - 12:23h

msoliver escreveu:


Dlnh0 escreveu:

msoliver escreveu:


Dlnh0 escreveu:

Olá galera,
Não sei se existe algo do tipo, já pesquisei um bom tanto , mas não achei nada!
É o seguinte, preciso criar um shell que me permita rodar um determinado processo, porém esse processo fica rodando constantemente, então eu queria fechar ele com o ctrl+c e continuar executando o resto dos comandos do shell.. Segue o exemplo abaixo:


ps -C ping 172.16.77.17 > /dev/null
if [ $? = 0 ]
then
echo 'O programa está rodando! Deseja rodar manualmente? y/n'
read RESP
else
echo 'A bagaça não ta rodando! Deseja rodar manualmente? y/n '
read RESP
fi
if [ $RESP = "y" ]
then
pkill ping
echo 'programa interrompido. Iniciando na sua máquina!'
ping 172.16.77.17 # Aqui seria o tal processo que eu queria manter ele rodando até achar necessário e quando quisesse parar dar um ctrl+c e continuar com #os comandos abaixo ? , com o ping funciona, mas com um arquivo que eu fico escrevendo um log por exemplo, não funfa..
Echo 'Mensagem dps do ctrl+c!'
#resto dos comandos
else
echo 'Saindo!'
fi
exit

Boa tarde Dinho.
O comando:
ps -C ping 172.16.77.17 > /dev/null 

Acusa erro....
Primeiro de o comando, depois
ps -C ping
Reveja o Condicional, a lógica está 'estranha'
VEJA => echo -e "$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')"
Att.: Marcelo Oliver


Então brother acho que não fui muito claro, desculpe.. Sou novato no assunto..
No meu trabalho a gnt tem um "migrador" que faz a migração de dados de uma base pra outra.

Dei um file nele pra vcs entenderem (migrador: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), not stripped).

Esse migrador fica rodando infinitamente e sobe pelo crontab caso alguém o mate .
Quando a galera roda na mão sem verificar se já estava rodando,
ou esquecem de matar e comentar o crontab antes de rodar,
acaba por duplicar os dados.(rodam na mão pra verificar se há erros.)
-E não posso mexer no migrador, nem impedir a galera de rodar ele na mão-.
Por isso estou tentando criar algo que valide automaticamente se já está rodando.
mate o migrador
comente o crontab
roda na mão o migrador, e após o ctrl+c rode o abaixo
"descomenta" crontab

#!/bin/sh

ps aux| grep "[.]/migrador" > /dev/null # Esse eu uso pra verificar se ta rodando
if [ $? = 0 ]
then
echo 'O programa está rodando! Deseja rodar manualmente? y/n'
read RESP
else
echo 'A bagaça não ta rodando! Deseja rodar manualmente? y/n '
read RESP
fi
if [ $RESP = "y" ]
then
sed -i "/${f_2}.sh/s/^.*$/#&/" /var/spool/cron/root #comento ele no crontab
pkill -f "migrador" # mato se estiver rodando
cd /home/exec # entro na pasta
exec ./migrador # executa no terminal de quem rodar, a galera só sabe sair do migrador com o ctrl+c
#Por isso eu queria que após sair do exec acima pulasse pro comando abaixo que descomenta o crontab pra subir automáticamente
sed -i "/migrador/s/.//" /var/spool/cron/root #descomenta crontab
echo 'Essa mensagem era pra aparecer depois do ctrl+c!'

else
echo 'Saindo!'
fi
exit


Desde já agradeço a todos pela atenção..

Boa tarde DinhO.
Segue:
#!/bin/bash
# CAPTURA "CTRL+C"
trap 'CTRL_C' SIGINT #Ao pressionar CTRL+C, Executa a função CTRL_C

PERGUNTA() {
#Se Responder algo diferente de [YyNn], pergunta novamente.....
#Respondendo "corretamente", transforma em maiúscula para facilitar a avaliação;
read -p "Deseja rodar manualmente? [YN]: " -e -n1 RESP
[[ $RESP != +(y|Y|n|N) ]] && PERGUNTA || RESP=${RESP^}
}

CTRL_C() {
printf "\n Control-C CAPTURADO! \n Crontab será \"DESCOMENTADO\"\n"
sed -i "/migrador/s/.//" /var/spool/cron/root #descomenta crontab
wait
printf "\n Essa mensagem aparecerá depois do ctrl+c! \n Saindo\n"
exit 0;
}

clear;
if (( $(pgrep -c "\./migrador") > 0 ));then #pgrep substitui ps aux|grep.......
printf "\n O programa está rodando! \n"
PERGUNTA
if [[ ${RESP} = "Y" ]];then
sed -i "/${f_2}.sh/s/^.*$/#&/" /var/spool/cron/root #comento ele no crontab
pkill -f "migrador" # mato o processo
cd /home/exec # entro na pasta
exec ./migrador
else
printf "\nSaindo\n"
exit 0;
fi
else #Partindo da afirmação que o programa sempre estará "rodando", acredito que esta parte é desnecessária.... Mas....
printf "\nO programa não está rodando!\n"
PERGUNTA
if [[ ${RESP} = "Y" ]];then
cd /home/exec # entro na pasta
exec ./migrador
else
printf "\nSaindo\n"
exit 0;
fi
fi


Importante => echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver


Então bro, ainda não deu certo, pois quando eu passo a rodar o migrador, parece que todos os poderes são dele, aí o CTRL+C sai do migrador e meu shell não continua..
Antes de iniciar o migrador o CTRL_C funcionou perfeitamente.








Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts