• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Nazgulled

Correr correctamente processos em background e foreground

2 mensagens neste tópico

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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Acho que já resolvi o problema, o código corrigido está no mesmo link.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora