Jump to content

Correr correctamente processos em background e foreground


Recommended Posts

Posted

Este problema vem do mesmo código que o anterior

O meu código actual pode ser visto no mesmo link:

http://gist.github.com/117657

Independentemente de um comando existir ou não, será sempre feito um fork(). Se o comando a ser executado não existir o execvp() vai devolver -1 pelo que será impresso no ecrã uma mensagem de erro e de seguida será chamado o exit(1). Isto implica que foi enviado um sinal que o childSignalHandler() apanhou e processou de onde outra mensagem será impressa no ecrã tipo "[PID] Terminated (Status: 1)", isto vem da linha 79 do código disponibilizado no link acima).

Até aqui tudo bem, a primeira mensagem é suposto aparecer, a segunda já não. Não afecta a aplicação de qualquer forma mas é uma mensagem escusada.

O problema é que nesta situação, eu já mais voltarei a ter acesso à minha shell. Isto porque o código do lado do pai (depois do filho já ter sido terminado, pois o comando a ser executado não existe e rapidamente o processo filho foi terminado) vai entrar no ciclo "while(!fgWait) pause()" (ver linha 211). A variável "fgWait" já mais irá mudar de valor porque o pause() não vai interpretar/receber nenhum sinal que faça chamar o childSignalHandler() e consequentemente mude o valor de "fgWait".

Espero ter-me feito entender... Já andei aqui às voltas com isto mas não estou a conseguir chegar a uma solução que resolva o problema...

Ideias?

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.