Tratando sinal kill em um processo Harbour
Moderador: Moderadores
- RobertoLinux
- Usuário Nível 3

- Mensagens: 110
- Registrado em: 14 Abr 2014 18:32
- Localização: Fortaleza/Ce
Tratando sinal kill em um processo Harbour
Boa tarde.
Prezados colegas, alguém sabe informar se o Harbour sabe como processar um sinal de kill -HUP do Sistema Operacional ?
A ideia, seria ..
Ao receber o sinal do SO, a aplicação fecharia todos os arquivos com commit e terminaria sem danos de corrupção.
O ambiente seria ...
O SO ao receber um sinal do nobrek que a força irá acabar, enviaria u sinal killall -HUP <myharbour_app.,exe> por exemplo, e desligaria o servidor de modo seguro.
Muito Obrigado.
Prezados colegas, alguém sabe informar se o Harbour sabe como processar um sinal de kill -HUP do Sistema Operacional ?
A ideia, seria ..
Ao receber o sinal do SO, a aplicação fecharia todos os arquivos com commit e terminaria sem danos de corrupção.
O ambiente seria ...
O SO ao receber um sinal do nobrek que a força irá acabar, enviaria u sinal killall -HUP <myharbour_app.,exe> por exemplo, e desligaria o servidor de modo seguro.
Muito Obrigado.
Entusiasta
Tratando sinal kill em um processo Harbour
Tem alguns nobreaks q integram com SOs, tem q ver o modelo e o tipo de integração pra poder trabalhar a ideia, pq por exemplo se a integração for via arquivo texto ou TCP é possível fazer algo, desde que configure o nobreak para qdo por exemplo faltar X minutos começa os procedimentos...
O mesmo vale para o sinal de Kill, pq em se tratando de Energia, se o Nobreak mandar um Kill sem um período de tempo considerável pra processar as "contra medidas" digamos assim não daria tempo.
Agora não sei se o Harbour pode interceptar isso, tem um tópico aki mas não consegui achar, mas lembro q foi postado de como interceptar o desligamento mas no Windows, talvez sirva se localizarmos.
O mesmo vale para o sinal de Kill, pq em se tratando de Energia, se o Nobreak mandar um Kill sem um período de tempo considerável pra processar as "contra medidas" digamos assim não daria tempo.
Agora não sei se o Harbour pode interceptar isso, tem um tópico aki mas não consegui achar, mas lembro q foi postado de como interceptar o desligamento mas no Windows, talvez sirva se localizarmos.
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:
“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”.
Até 2017 Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL
Novos Projetos:
Desktop Visual Windev Desktop
Celular Android/iOS Windev Mobile
WEB Windev Web
Sejamos gratos a Deus.
“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”.
Até 2017 Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL
Novos Projetos:
Desktop Visual Windev Desktop
Celular Android/iOS Windev Mobile
WEB Windev Web
Sejamos gratos a Deus.
- RobertoLinux
- Usuário Nível 3

- Mensagens: 110
- Registrado em: 14 Abr 2014 18:32
- Localização: Fortaleza/Ce
Tratando sinal kill em um processo Harbour
Obrigado ...
Vou procurara mais por aqui ...
Valeu!
Vou procurara mais por aqui ...
Valeu!
Entusiasta
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
Tratando sinal kill em um processo Harbour
Ola!
O comando do no-break é Kill ou shutdown ?
Faça isso usando o bash criando um arquivo txt e lendo com o Harbour, deve compilar usando MT o harbour, para ficar monitorando se o arquivo shutdown.txt existir.
O comando shutdown envia uma msg de aviso a todos os terminais, pode também interceptar essa msg, só não sei como, mas é possível.
Saudações,
Itamar M. Lins Jr.
O comando do no-break é Kill ou shutdown ?
Faça isso usando o bash criando um arquivo txt e lendo com o Harbour, deve compilar usando MT o harbour, para ficar monitorando se o arquivo shutdown.txt existir.
O comando shutdown envia uma msg de aviso a todos os terminais, pode também interceptar essa msg, só não sei como, mas é possível.
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
- RobertoLinux
- Usuário Nível 3

- Mensagens: 110
- Registrado em: 14 Abr 2014 18:32
- Localização: Fortaleza/Ce
Tratando sinal kill em um processo Harbour
Itamar e demais ...
Seria +/- assim ...
Independente do nobeak ... se houver algo do tipo ..
killall -HUP <aplic_harbour.exe> .. por exemplo essa <aplic_harbour.exe> trataria o sinal, no caso HUP, assim como é feito com o ALT-C.
Func myHUP()
Close All
Quit
EndFunc
Obrigado.
Seria +/- assim ...
Independente do nobeak ... se houver algo do tipo ..
killall -HUP <aplic_harbour.exe> .. por exemplo essa <aplic_harbour.exe> trataria o sinal, no caso HUP, assim como é feito com o ALT-C.
Func myHUP()
Close All
Quit
EndFunc
Obrigado.
Entusiasta
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
Tratando sinal kill em um processo Harbour
Ola!
Tem que ver via C para onde vai esse tal -HUP. (devout) do killall.
Como faria isso com outros programas ? se tiver o OpenOffice/Libreoffice aberto como ele faz para salvar a planilha, documento ?
Tem que ver isso sem harbour entender como funciona para depois poder programar no harbour. Mas de toda forma o .exe do harbour vai precisar monitorar isso.
Para ele ser avisado pelo tal -HUP, precisa ver onde ele(killall) manda o sinal, se é via TCP ou via telnet...traduzindo em que "com1->tty" ele avisa.
Saudações,
Itamar M. Lins Jr.
Tem que ver via C para onde vai esse tal -HUP. (devout) do killall.
Como faria isso com outros programas ? se tiver o OpenOffice/Libreoffice aberto como ele faz para salvar a planilha, documento ?
Tem que ver isso sem harbour entender como funciona para depois poder programar no harbour. Mas de toda forma o .exe do harbour vai precisar monitorar isso.
Para ele ser avisado pelo tal -HUP, precisa ver onde ele(killall) manda o sinal, se é via TCP ou via telnet...traduzindo em que "com1->tty" ele avisa.
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
- RobertoLinux
- Usuário Nível 3

- Mensagens: 110
- Registrado em: 14 Abr 2014 18:32
- Localização: Fortaleza/Ce
Tratando sinal kill em um processo Harbour
Saudações,
Itamar e demais, o sinal é via IPC, (Interprocess Communications), se a plicação trata os sinais, ela pode ter uma forma de sair com elegância.
No caso da APP Harbour, fecharia os arquivos todos e sairia, melhorando sobremaneira a segurança dos dados.
Pesquisei na net e vi que é +/- simples em C e até mesmo em script shell,
Não sei se posso mas vou copiar aqui um script em bash pra vcs terem uma ideia de como seria +/- ...
#!/bin/bash
function trataErro()
{
echo "Voce pressionou ctrl-c"
echo "Mas nao posso terminar agora"
}
trap trataErro SIGINT SIGTERM
for i in {1..10}
do
sleep 1
echo "Dormindo"
done
O comando trap faz o tratamento dos sinais INT e TERM no caso aqui .;.. quando o evento ocorre a função trataErro() é cahamda.
Obrigado a todos.
Itamar e demais, o sinal é via IPC, (Interprocess Communications), se a plicação trata os sinais, ela pode ter uma forma de sair com elegância.
No caso da APP Harbour, fecharia os arquivos todos e sairia, melhorando sobremaneira a segurança dos dados.
Pesquisei na net e vi que é +/- simples em C e até mesmo em script shell,
Não sei se posso mas vou copiar aqui um script em bash pra vcs terem uma ideia de como seria +/- ...
#!/bin/bash
function trataErro()
{
echo "Voce pressionou ctrl-c"
echo "Mas nao posso terminar agora"
}
trap trataErro SIGINT SIGTERM
for i in {1..10}
do
sleep 1
echo "Dormindo"
done
O comando trap faz o tratamento dos sinais INT e TERM no caso aqui .;.. quando o evento ocorre a função trataErro() é cahamda.
Obrigado a todos.
Entusiasta
- RobertoLinux
- Usuário Nível 3

- Mensagens: 110
- Registrado em: 14 Abr 2014 18:32
- Localização: Fortaleza/Ce
Tratando sinal kill em um processo Harbour
Boa tarde nobres colegas,
Pesquisando na raiz do código fonte do Harbour encontrei algo sobre tratamento de signal, talvez o Harbour até trate de alguma forma, não sei se da forma que pretendia, mas de qualquer forma enviei um e-mail para o Vailton falando dessa possibilidade.
Segue o que encontrei...
roberto@linux-br8r:~/C/hbv34s> grep -inr "signal.h"
contrib/xhb/hbserv.ch:60:/* Signal handler return types */
contrib/xhb/hbserv.ch:67: signal handler as a parameter
contrib/xhb/hbserv.c:71:/* TODO: Haiku will supposedly do this later on, read /boot/develop/headers/posix/signal.h */
contrib/xhb/hbserv.c:76:#include <signal.h>
contrib/xhb/hbserv.c:109:/* Unix specific signal handling implementation
contrib/xhb/hbserv.c:149: /* let's find the right signal handler. */
contrib/xhb/hbserv.c:152: /* avoid working if PRG signal handling has been disabled */
contrib/xhb/hbserv.c:177: a little dangerous. But we are in a signal hander...
contrib/xhb/hbserv.c:229: calling pthread exit from a signal handler will cause infinite wait for
contrib/xhb/hbserv.c:307: /* reset signal handling; this is done here (so I don't
contrib/xhb/hbserv.c:319: ATM we don't care very much about signal handling during
contrib/xhb/hbserv.c:406: /* let's find the right signal handler. */
contrib/xhb/hbserv.c:409: /* avoid working if PRG signal handling has been disabled */
contrib/xhb/hbserv.c:434: a little dangerous. But we are in a signal hander...
contrib/xhb/hbserv.c:563: * remove the signal handlers, and do it in a mutltiplatform fashon. Use this
contrib/xhb/hbserv.c:567:/* Set the signal handlers to our program interceptors. */
contrib/xhb/hbserv.c:641:/* Reset the signal handlers to the default OS value */
contrib/xhb/hbserv.c:698: * Initializes signal handler system
contrib/xhb/hbserv.c:796: /* reset default signal handling */
contrib/xhb/hbserv.c:900: * issued to signal handling routines. This is system dependant.
ChangeLog.txt:90410: + Adding more signal handlers plus some other mods.
ChangeLog.txt:156019: we should introduce a new variable to signal Harbour
ChangeLog.txt:199199: ! include signal.h in all *nixes builds - it was my typo and not only
utils/hbmk2/hbmk2.prg:9894: "signal.h" =>, ;
src/3rd/zlib/zlib.h:76: The library does not install any signal handler. The decoder checks
src/rtl/gtpca/gtpca.c:77:# include <signal.h>
src/rtl/gtos2/gtos2.c:108: #include <signal.h>
src/rtl/gtcrs/gtcrs.h:96:#include <signal.h>
src/rtl/gttrm/gttrm.c:83:# include <signal.h>
src/rtl/gttrm/gttrm.c:396:/* static variables use by signal handler */
src/rtl/gtstd/gtstd.c:70:# include <signal.h>
src/rtl/gtsln/gtsln.h:72:#include <signal.h>
src/rtl/gtxwc/gtxwc.h:70:#include <signal.h>
src/rtl/gtxwc/gtxwc.c:4945: /* for signal handler */
src/rtl/hbproces.c:60:# include <signal.h>
src/rtl/gtdos/gtdos.c
#include <signal.h>
src/rtl/hbinet.c:111: #include <signal.h>
src/vm/extrap.c:58: #include <signal.h>
A todos um muito obrigado e um exelente fim de semana.
Pesquisando na raiz do código fonte do Harbour encontrei algo sobre tratamento de signal, talvez o Harbour até trate de alguma forma, não sei se da forma que pretendia, mas de qualquer forma enviei um e-mail para o Vailton falando dessa possibilidade.
Segue o que encontrei...
roberto@linux-br8r:~/C/hbv34s> grep -inr "signal.h"
contrib/xhb/hbserv.ch:60:/* Signal handler return types */
contrib/xhb/hbserv.ch:67: signal handler as a parameter
contrib/xhb/hbserv.c:71:/* TODO: Haiku will supposedly do this later on, read /boot/develop/headers/posix/signal.h */
contrib/xhb/hbserv.c:76:#include <signal.h>
contrib/xhb/hbserv.c:109:/* Unix specific signal handling implementation
contrib/xhb/hbserv.c:149: /* let's find the right signal handler. */
contrib/xhb/hbserv.c:152: /* avoid working if PRG signal handling has been disabled */
contrib/xhb/hbserv.c:177: a little dangerous. But we are in a signal hander...
contrib/xhb/hbserv.c:229: calling pthread exit from a signal handler will cause infinite wait for
contrib/xhb/hbserv.c:307: /* reset signal handling; this is done here (so I don't
contrib/xhb/hbserv.c:319: ATM we don't care very much about signal handling during
contrib/xhb/hbserv.c:406: /* let's find the right signal handler. */
contrib/xhb/hbserv.c:409: /* avoid working if PRG signal handling has been disabled */
contrib/xhb/hbserv.c:434: a little dangerous. But we are in a signal hander...
contrib/xhb/hbserv.c:563: * remove the signal handlers, and do it in a mutltiplatform fashon. Use this
contrib/xhb/hbserv.c:567:/* Set the signal handlers to our program interceptors. */
contrib/xhb/hbserv.c:641:/* Reset the signal handlers to the default OS value */
contrib/xhb/hbserv.c:698: * Initializes signal handler system
contrib/xhb/hbserv.c:796: /* reset default signal handling */
contrib/xhb/hbserv.c:900: * issued to signal handling routines. This is system dependant.
ChangeLog.txt:90410: + Adding more signal handlers plus some other mods.
ChangeLog.txt:156019: we should introduce a new variable to signal Harbour
ChangeLog.txt:199199: ! include signal.h in all *nixes builds - it was my typo and not only
utils/hbmk2/hbmk2.prg:9894: "signal.h" =>, ;
src/3rd/zlib/zlib.h:76: The library does not install any signal handler. The decoder checks
src/rtl/gtpca/gtpca.c:77:# include <signal.h>
src/rtl/gtos2/gtos2.c:108: #include <signal.h>
src/rtl/gtcrs/gtcrs.h:96:#include <signal.h>
src/rtl/gttrm/gttrm.c:83:# include <signal.h>
src/rtl/gttrm/gttrm.c:396:/* static variables use by signal handler */
src/rtl/gtstd/gtstd.c:70:# include <signal.h>
src/rtl/gtsln/gtsln.h:72:#include <signal.h>
src/rtl/gtxwc/gtxwc.h:70:#include <signal.h>
src/rtl/gtxwc/gtxwc.c:4945: /* for signal handler */
src/rtl/hbproces.c:60:# include <signal.h>
src/rtl/gtdos/gtdos.c
src/rtl/hbinet.c:111: #include <signal.h>
src/vm/extrap.c:58: #include <signal.h>
A todos um muito obrigado e um exelente fim de semana.
Entusiasta
