Jump to content

[C][Dúvida] Como libertar um processo criado com o fork+execlp ou com o system


rgcaldas

Recommended Posts

Boas

Existe alguma forma de libertar um processo criado com o fork() + execlp

Por exemplo, eu chamo o firefox para abrir um ficheiro de dentro do meu código com

execlp("firefox","firefox","index.html",NULL)

E o firefox abre o ficheiro mas o código só termina quando eu fechar o firefox, E o que eu queria era que a minha aplicação terminasse mas o firefox continuasse.

P.S. se for com o system é igual porque ele utiliza o fork.

Alguém tem alguma ideia

Link to comment
Share on other sites

Por acaso não estás a fazer um wait aí pelo meio?

É que se não estás o programa principal devia terminar.

PS: Em que SO estás? Testei em Mac e Linux o programa principal não ficava à espera do outros processo (aliás, com o gVim, nem valia a pena pôr o wait que terminava na mesmo antes de fechar o gVim).

Link to comment
Share on other sites

Antes de mais obrigado mais uma vez Rui pela resposta

Não tenho wait

Tou em linux

experimenta este código se puderes

#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>


int main(int argc, char* argv[])
{
pid_t pid;

(void)argc;(void)argv;

pid = fork();
if (pid==0)
{
	execlp("firefox",NULL);
}

return 0;
}

A mim dá-me uns erros estranhos, mas também dá se tentar correr o firefox da linha de comandos, e fica à espera

Link to comment
Share on other sites

Antes de mais obrigado mais uma vez Rui pela resposta

Não tenho wait

Tou em linux

experimenta este código se puderes

#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>


int main(int argc, char* argv[])
{
pid_t pid;

(void)argc;(void)argv;

pid = fork();
if (pid==0)
{
	execlp("firefox",NULL);
}

return 0;
}

A mim dá-me uns erros estranhos, mas também dá se tentar correr o firefox da linha de comandos, e fica à espera

Na linha de comandos é normal que fique à espera do processo (a menos que uses o &), agora quando usas o fork, só com um wait (ou algo parecido) é que o processo pai fica à espera do filho.

Eu testei um código semelhante ao que colocaste aí, e não ficava à espera que encerrasse o firefox. Podes colocar aqui o output da execução desse código?

Link to comment
Share on other sites

Na linha de comandos é normal que fique à espera do processo (a menos que uses o &), agora quando usas o fork, só com um wait (ou algo parecido) é que o processo pai fica à espera do filho.

Eu testei um código semelhante ao que colocaste aí, e não ficava à espera que encerrasse o firefox. Podes colocar aqui o output da execução desse código?

Aqui fica o output

rg@rg-desktop:Desktop$ gcc teste.c -o teste.o -Wall -ansi
rg@rg-desktop:Desktop$ ./teste.o
rg@rg-desktop:Desktop$ /home/rg/.themes/T-ish-Clearlooks-AquaStyle/gtk-2.0/gtkrc:2: Unable to find include file: "iconrc"
/home/rg/.themes/T-ish-Clearlooks-AquaStyle/gtk-2.0/gtkrc:60: Clearlooks configuration option "sunkenmenu" is not supported and will be ignored.
/home/rg/.themes/T-ish-Clearlooks-AquaStyle/gtk-2.0/gtkrc:61: Clearlooks configuration option "menuitemstyle" is not supported and will be ignored.
/home/rg/.themes/T-ish-Clearlooks-AquaStyle/gtk-2.0/gtkrc:62: Clearlooks configuration option "listviewitemstyle" is not supported and will be ignored.
/home/rg/.themes/T-ish-Clearlooks-AquaStyle/gtk-2.0/gtkrc:63: Clearlooks configuration option "progressbarstyle" is not supported and will be ignored.

Eu também me parecia que não tinha a ver com o código, deve ser do meu ubuntu (sim ainda não consigo configurar debian como deve ser  😛 )

Link to comment
Share on other sites

g@rg-desktop:Desktop$ ./teste.o
rg@rg-desktop:Desktop$ /home/rg/.themes/T-ish-Clearlooks-AquaStyle/gtk-2.0/gtkrc:2: Unable to find include file: "iconrc"

Como podes ver por estas duas linhas, o programa terminou (repara no início da segunda linha). Ou seja, podes executar qualquer comando neste momento. No entanto, As mensagens de erro poderão ainda aparecer aí pelo meio misturadas com o que fizeres depois.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.