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