Eventos Unyx

1. Eventos Unyx

Roberto
mrx6s0

(usa Ubuntu)

Enviado em 16/08/2016 - 20:03h

Boa noite

Gostaria de saber se há algum modo de algum programa rodar em back ground no Linux. Assim como há no windows. Rodar e continuar sendo executado, é claro...

Qualquer ajuda é bem vinda!

[RODAR EM BACK GROUND E CONTINUAR EM EXECUÇÃO]


  


2. Re: Eventos Unyx

Paulo
paulo1205

(usa Ubuntu)

Enviado em 16/08/2016 - 20:34h

Certamente há. Leia sobre a função daemon() (na seção 3 da documentação on-line).

Essa função é, na verdade, um encapsulamento de múltiplas chamadas ao sistema, e tem efeito mais ou menos parecido com o seguinte bloco de código (aqui mostrado de modo simplificado).

switch(fork()){
case -1: // Não conseguiu criar novo processo.
return -1;
case 0: // Processo filho: este aqui é o daemon.
chdir("/");
setsid(); // Desassocia-se do terminal controlador.
return 0;
default: // Processo pai: termina para deixar o filho em execução em background.
_exit(0);
}



3. Re: Eventos Unyx

Roberto
mrx6s0

(usa Ubuntu)

Enviado em 18/08/2016 - 05:52h

paulo1205 escreveu:

Certamente há. Leia sobre a função daemon() (na seção 3 da documentação on-line).

Essa função é, na verdade, um encapsulamento de múltiplas chamadas ao sistema, e tem efeito mais ou menos parecido com o seguinte bloco de código (aqui mostrado de modo simplificado).

switch(fork()){
case -1: // Não conseguiu criar novo processo.
return -1;
case 0: // Processo filho: este aqui é o daemon.
chdir("/");
setsid(); // Desassocia-se do terminal controlador.
return 0;
default: // Processo pai: termina para deixar o filho em execução em background.
_exit(0);
}



Olá, amigo. Isso foi de grande ajuda.



4. Re: Eventos Unyx

Roberto
mrx6s0

(usa Ubuntu)

Enviado em 18/08/2016 - 06:24h

paulo1205 escreveu:

Certamente há. Leia sobre a função daemon() (na seção 3 da documentação on-line).

Essa função é, na verdade, um encapsulamento de múltiplas chamadas ao sistema, e tem efeito mais ou menos parecido com o seguinte bloco de código (aqui mostrado de modo simplificado).

switch(fork()){
case -1: // Não conseguiu criar novo processo.
return -1;
case 0: // Processo filho: este aqui é o daemon.
chdir("/");
setsid(); // Desassocia-se do terminal controlador.
return 0;
default: // Processo pai: termina para deixar o filho em execução em background.
_exit(0);
}


paulo1205 escreveu:

Certamente há. Leia sobre a função daemon() (na seção 3 da documentação on-line).

Essa função é, na verdade, um encapsulamento de múltiplas chamadas ao sistema, e tem efeito mais ou menos parecido com o seguinte bloco de código (aqui mostrado de modo simplificado).

switch(fork()){
case -1: // Não conseguiu criar novo processo.
return -1;
case 0: // Processo filho: este aqui é o daemon.
chdir("/");
setsid(); // Desassocia-se do terminal controlador.
return 0;
default: // Processo pai: termina para deixar o filho em execução em background.
_exit(0);
}



Amigo, nesse código eu poderia implementar a parte do código que me passastes? Eu tentei alguns métodos, mas não tive sucesso. Se puder me ajudar, ficarei realmente grato.


#include <stdio.h> // input/output standard
#include <termios.h> // to terminal stuffs
#include <unistd.h> // *nyx only
#include <malloc.h>

#define EXIT_SUCCESS

int main(void)

{
///* struct of fuction getchar(); */

struct termios term, term_orig;
tcgetattr(STDIN_FILENO, &term);
term_orig = term;
term.c_lflag &= ~ECHO;
tcsetattr(STDIN_FILENO, TCSANOW, &term);



///* code here... */

char *key; //

log:

key = getpass(" "); // get keys
fflush(stdin);
printf("\nkeys pressed: %s\n",key); //* check the validity later


if (key == '\NUL')
{

ferror("Error...");
return -1;

}

else

{


printf("\n");

goto log; // loop.

return 0;

}




///* Remember to set back, or your commands won't echo! */

tcsetattr(STDIN_FILENO, TCSANOW, &term_orig);

return EXIT_SUCCESS;

}



Esse código faz parte de um código maior. É um estilo meio asiático, onde o usuário terá que digitar as teclas sem vê-las nem em modo console, para então o terminal retornar com as palavras digitadas. Que na verdade, são dicas e respostas, para os próximos passos do jogo. Essa parte é do nível hard. hehe

Ficarei grato se puder ajudar!


Abraço.


5. Re: Eventos Unyx

Paulo
paulo1205

(usa Ubuntu)

Enviado em 19/08/2016 - 07:58h

Antes de responder, um esclarecimento: UNIX é escrito, como você pode ver, com I e, dependendo do contexto, por ser uma marca registrada, com todas as letras maiúsculas.

No programa que você mostrou, eu não vejo onde ou como transformá-lo num daemon. Ao que parece, você quer manipular terminal (suas chamadas a tcsetattr(), getpass() e printf()), e isso só implica que ele não pode ter as características de um daemon tradicional, que tem justamente como característica executar sem um terminal controlador.

Por fim, faça um favor a si mesmo, livrando-se daquele famigerado fflush(stdin).






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts