+ Responder ao Tópico



  1. #1
    kappalinux
    Visitante

    Padrão Pegar o PID de um processo em execucao

    Gostaria de saber se tem algum comando em C e eu possa utilizar para pegar o PID de um processo em execucao..?
    faloow
    valeu
    []'s

  2. #2
    Flanela
    Visitante

    Padrão Pegar o PID de um processo em execucao

    Veja se as seguintes funções lhe são úteis:

    #include <sys/types.h>
    #include <unistd.h>
    pid_t getpid(void); -> PID do próprio software
    pid_t getppid(void); -> PID do programa "Pai"

    Porêm eu também gostaria de saber se há alguma biblioteca para retornar o PID de um processo que não esteja relacionado com o software requerente. Se alguém puder nos ajudar ...

    um abraço.[/b]

  3. #3

    Padrão pid

    tupow....

    ps -aux | grep "nome_do_processo" ??

    da um cut na parte q t interessa do resultado

    []'s

  4. #4
    Flanela
    Visitante

    Padrão Pegar o PID de um processo em execucao

    É aproximadamente o processo que eu uso hj, mas não é o que eu gostaria de usar, pois dessa forma vc aliena o seu software ao funcionamento de outro ("ps"). Para resolver este impasse, eu estou pesquisando a bendita biblioteca que é capaz de controlar e verificar processos do SO. Se tiver alguma luz ...

    abraço.

  5. #5
    kappalinux
    Visitante

    Padrão Pegar o PID de um processo em execucao

    e ai pessoal!!!
    fikei sabendo q a funcao popen() pode ser muito util para manipular comandos shell em programas em C..mas eu ainda nao dei uma estudada nessa funcao para verificar se realmente funciona..
    faloooow
    ateh++
    []'s

  6. #6
    Visitante

    Padrão Pegar o PID de um processo em execucao

    funciona assim:

    /* ******** inicio exemplo ******** */

    FILE *fle_cmd;
    char chr_cmd, chr_leitura[SIZE];

    sprintf(chr_cmd, "%s", "ls -1 /usr/bin |awk '{print "rm -f " $1}' |sh");

    // "abrindo" o comando
    fle_cmd = popen (chr_cmd, "r");

    while (fgets(chr_leitura, SIZE, fle_cmd) != NULL) {
    chr_leitura[strlen(chr_leitura) - 1] = '\0';
    // exibindo o retorno
    printf("Retorno -> %s\n", chr_leitura);
    }

    pclose(fle_cmd);

    /* ******* fim exemplo ******* */

    até mais.

  7. #7
    kappalinux
    Visitante

    Padrão Pegar o PID de um processo em execucao

    valeu cara...valeu mesmo!!! kebrou um galhao cara!!
    ;-)
    falooow
    []'s

    ateh++

  8. #8

    Padrão Pegar o PID de um processo em execucao

    na verdade vc pode tratar o ponteiro do popen como se fosse um fopen, ou seja tratar ele como arquivo msm....

    se vc abrir um comando em modo escrita podeira escrever no programa como escreveria em um arquivo (eu uso o fprintf), ou se abrir em modo leitura vc le os resultados dele como um arquivo (assim como nosso amigo fez ai em cima)

  9. #9
    kappalinux
    Visitante

    Padrão Pegar o PID de um processo em execucao

    blza cara valeu pelas dicas!!!
    o fprintf eu conheco..eu ja usei bastante para escrever em arquivos etc etc e tal..
    mas de qualquer forma vlaeu..
    se alguem souber um tutorial bom sobre escrita de shellcodes basico poderia me passar o link?? sem ser o da pagina da unsekurity..
    valeu []'s
    ateh++
    faaloow

  10. #10

    Padrão Pegar o PID de um processo em execucao

    Tipo, pode usar o system() pra executar um comando shell dentro do programa em C. Ai fica facil pegar o PID.


    [ ] ´s

  11. #11
    kappalinux
    Visitante

    Padrão Pegar o PID de um processo em execucao

    mas eu nao consigo pegar o PID com comando system() e armazenar em uma variavel declarada no progama..
    eh mais facil usar getpid()

  12. #12
    Kakaroto
    Visitante

    Padrão Pegar o PID de um processo em execucao

    e ae ta uma olhada neste link tem uma referencia da glib com todas as funções vê se isso q procura ok
    http://www.gnu.org/software/libc/manual/html_node/

    falow

    kakaroto

  13. #13
    fricardo
    Visitante

    Padrão Pegar o PID de um processo em execucao

    É só uma idéia. Mas eu acho q tem como obter o PID lendo as informações do /proc. Eu não tentei... mas quem puder tentar... acho q tem tudo para funcionar.

    fricardo

  14. #14
    kappalinux
    Visitante

    Padrão Pegar o PID de um processo em execucao

    isso eh verdade tem como pegar o PID pelo /proc mas se kisermos q contem dentro do /proc/PID_em_processamento ?
    por exemplo acessar um /proc/PID para pegarmos termos mais detalhes interessantes sobre o q estah ocorrendo?
    por exemplo..um..
    programa q ta sendo executando como root e SUID bit setado. Imaginemos q esse programa cria um link simbolico no /tmp mas esse programa usa o tmpnam() para gerar esse arquivo no /tmp, nao poderiamos prever qual arquivo serah criado no /tmp e as possibilidades de acertar com qual nome ele serah criada sao tao baixas q chegam a ser nulas.
    se conseguirmos acessar o /proc/PID_desse_processo.. saberiamos com qual nome esse o arquivo serah gerado no /tmp e antes q esse arquivo fosse gerado poderiamos cria-lo primeir e adicionar uma conta com id 0 e fazer um link simbolico do /etc/passwd.
    Mas ai q estah o problema no /proc os processos do superusuario nao pode ser acessados por usuarios comuns. pelo menos no slackware nao...nas outras distribuicoes ainda nao tentei..

  15. #15
    fricardo
    Visitante

    Padrão Pegar o PID de um processo em execucao

    Parece q há como funções do userland acessarem o /proc. Existem funções de leitura na interface do procfs. Esta informação está no "Linux Kernel Procfs Guide", q pode ser baixado na web.

    fricardo