1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Processos em C

Discussão em 'Dúvidas e Suporte Técnico - GNU/Linux & *nix' iniciada por Albus Severus, 4 de Junho de 2009. (Respostas: 6; Visualizações: 605)

  1. Boas,

    Eu estou a fazer um programa em C que consiste numa shell com alguns comandos.
    Um deles é o top -n1 -u [USER], que quando eu o executo através de uma função exec, ele nunca pára está sempre em execução.
    Alguém me pode ajudar?
     
  2. alexmgarcia

    alexmgarcia Power Member

    Se pusesses a source sempre ajudava algo.
    Mas já agora tenta com a função system.
     
  3. void informar(int command,int period,int run_time)
    {
    ____char comando[MAX_CANON],versao[MAX_CANON],flag[MAX_CANON];
    ____int tempo=0;
    ____pid_t pid;

    ____if (!command)
    ____{
    ________strcpy(comando,"top");
    ________strcpy(versao,"top -n1 -u ");
    ________ strcat(versao,getenv("LOGNAME"));
    ________strcpy(flag,"-b");
    ____}
    ____else if (command==1)
    ____{
    ________strcpy(comando,"ps");
    ________strcpy(versao,"ps u");
    ________strcpy(flag,"-a");
    ____}
    ____else
    ________return;

    ____while (tempo<run_time)
    ____{
    ________pid=fork();

    ________if (!pid)
    ____________execlp(comando,versao,flag,NULL)
    ________else
    ____________wait(NULL);

    ________sleep(period);
    ________tempo+=period;
    ____}
    }

    Aqui está o código.
    Tenho que utilizar exec e não system.
     
    Última edição: 4 de Junho de 2009
  4. Pinipum

    Pinipum Power Member

    top -b -n1 -u
     
  5. E no terceiro parâmetro da função põe-se uma string vazia?

    execlp("top","top -b -n1 -u [USER]","",NULL);

    Não resultou.
    Não há outra dica?
     
    Última edição: 4 de Junho de 2009
  6. fmvl

    fmvl Power Member

    Código:
    //---EXECS----------------------------------------
    
    /*-------------------------------------------------------------------------------------------------------------------------------------------------------------
     *execl("caminho para o executavel", "executavel", "argumento 1", "argumento 2", ..."argumento n", NULL);
     *  ret =  execl ("/bin/ls", "ls", "-l",NULL);
     *-------------------------------------------------------------------------------------------------------------------------------------------------------------
     *execv("caminho para o executavel","comando a executar com os seus argumentos");
     * char *cmd[] = { "ls", "-l", NULL };
     * ret = execv ("/bin/ls", cmd);
     *-------------------------------------------------------------------------------------------------------------------------------------------------------------
     *execle("caminho para o executavel", "executavel", "argumento 1", "argumento 2", ...
     * "argumento n", NULL, envio de variaveis para o sistema);
     *char *env[] = { "HOME=/usr/home", "LOGNAME=home", NULL };
     * ret = execle("/bin/ls", "ls", "-l", NULL, env);
     *-------------------------------------------------------------------------------------------------------------------------------------------------------------
     *execve("caminho para o executavel","comando a executar com os seus argumentos",
     * envio de variaveis para o sistema);
     *char *cmd[] = { "ls", "-l", NULL };
     * char *env[] = { "HOME=/usr/home", "LOGNAME=home", NULL };
     * ret = execve ("/bin/ls", cmd, env);
     *-------------------------------------------------------------------------------------------------------------------------------------------------------------
     *execlp("comando a procuradar na(s) PATH do sistema", "executavel", "argumento 1", 
     * "argumento 2", ..."argumento n", NULL);
     *ret = execlp ("ls", "ls", "-l", NULL);
     *-------------------------------------------------------------------------------------------------------------------------------------------------------------
     *execvp("comando a procuradar na(s) PATH do sistema","comando a executar com os seus argumentos");
     *char *cmd[] = { "ls", "-l", NULL };
     * ret = execvp ("ls", cmd);
     */
    
    
    tenta:
    execlp("top","top", "-b", "-n1", "-u", "[USER]",NULL);
     
  7. Muito obrigado era isso mesmo.
    Já aprendi qualquer coisa hoje.
     

Partilhar esta Página