Gestão de processos em linux / Linguagem C

ifrias

Membro
Boas ! Tenho apenas uma dúvida relativa a um programa bastante simples que estou a tentar escrever . O programa deverá listar todos os processos (do mesmo user do programa) actualmente a correr no SO e deixar que o utilizador escolha qual o processo que deve ser morto . Alguém me sabe dar uma luz no sentido de me explicar sucintamente como se faz, ou que funções utiliza ?Inicialmente tinha pensado em criar um novo processo e no processo filho listar processos em execução usando a função execlp() . A questão está em conseguir tratar esta informação, uma vez que usada a execlp, o processo filho termina ... Os dados teriam de ir para algum ficheiro intermédio ?
 
E estas a pensar usar a função execlp() como?

Se queres usar mesmo essa função podes tentar usar o dup para passar o stdout para outro file qualquer ou mesmo para um pipe com o pai.
A questão é que não sei se isto funciona porque ao usares o execlp ele faz kill ao filho e portanto deves perder a ligação com o pai.
 
O execlp() serviria para executar o ps, mostrando quais os processos afectos ao utilizador actual .Pensei nessasolução, em redireccionar output para um ficheiro edepois mostrá-lo, a questão põe-se quando quiser mostrar ao utilizador quais os processos que ele quer matar . De qualquer das formas este problema não tem grande importância. O objectivo mesmo era saber como usar a primitiva kill()...para matar processos . Fiquem bem !
 
não sei ter alguma coisa a ver com isto , mas tb tenho um problema parecido....


queria fazer um prog em c que executa-s um processo numa tal directoria e que guarda-se a pid do processo para mais tarde desligar esse mesmo processo atraves do comando kill ou algo parecido...


cumps...
 
suponho que isso até seja mais fácil de se fazer . Basta guardar o pid do processo num ficheiro de texto, utilizando o redireccionamento de output que o Lossoth falou em cima . Da próxima vez que o programa fosse aberto bastaria abrir o ficheiro previamente guardado, converter a string do ficheiro de texto para int usando atoi() (corrijam-me se estiver errado ...) e matar o processo ... A minha questão é parecida, sim , mas o problema está em manipular não um, mas sim vários pids ... :S
 
Boas!

Podes tentar o system("ps"); em vez do execlp.

Com o System o comando é executado e o processo que o chama não morre. Apenas cede o controlo ao ps neste caso e depois retoma a execução normal.

Espero ter ajudado.
 
Back
Topo