Guest id194 Posted May 26, 2009 at 12:37 PM Report #267338 Posted May 26, 2009 at 12:37 PM 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?
Guest id194 Posted May 26, 2009 at 05:56 PM Report #267415 Posted May 26, 2009 at 05:56 PM Acho que já resolvi o problema, o código corrigido está no mesmo link.
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now