Como eu mato um código fortran em execução de dentro de um script de shell que acessa o mesmo código?

0

Eu tenho que usar um código FORTRAN que tenha uma interface de "estilo de menu". Eu acesso o código digitando um comando no terminal que abre o menu principal. A partir desse ponto e além, eu digito um número e o insiro para escolher uma opção que abra um submenu ou execute um comando. Para sair eu tenho que navegar de volta para o menu principal e digite "0" para finalizar o código e "voltar ao terminal". Por exemplo, no terminal eu digito:

code_command % abre o menu principal do código FORTRAN

1 → Eu escolho a opção 1 do menu principal, que abre um submenu;

2 → A partir desse submenu 1, escolho outro submenu, digitando a opção 2;

7 → De dentro deste segundo submenu, eu escolho a 7ª opção que faz a tarefa requerida.

0 → Eu volto do segundo submenu

0 → Eu volto do primeiro submenu (para o menu principal).

0 → Deixo o código e volto ao terminal

Então eu escrevi uma lista de comandos que eu tinha que digitar para fazer uma determinada tarefa e salvei este texto como um "script.sh", para fazer o código executar esta lista que eu digite:

code_command < script.sh

Finalmente, ele executa todas as linhas perfeitamente, exceto pelo último, quando ele falha, então eu tenho que abrir outro terminal e digitar:

pkill code_command

ou Ctrl + Z dentro da janela do terminal com falha.

Existe uma maneira de programar uma Ctrl + Z no script.sh , para eliminar o código em execução antes que ele falhe?

    
por Laio Marinheiro 01.06.2016 / 22:31

1 resposta

0

Estou assumindo que você está usando bash embora isso funcione para sh e csh também.

Primeiro: defina o núcleo ulimit como diferente de zero (para que você possa criar um dump principal). man bash e procure por ulimit. %código%. O padrão bash é NO core dump e deve ser inserido novamente toda vez que uma nova janela for aberta ou uma nova sessão for iniciada.

Segundo: Execute seu programa e em outra janela ulimit -c <max size of core dump> para ver se os programas ainda estão em execução e obtenha um dump principal. Veja kill -3 <pid> e a opção "SIGQUIT" ou "-3".

Terceiro. Use man 7 signal para ver a instrução que causou o problema. Você terá que compilar o programa usando a opção "-g". %código%. gdb pode ser usado para depurar interativamente. (E está muito além da pergunta que você fez).

Do que você mencionou na sua pergunta, você não está manipulando o EOF corretamente para "< input" ou stdin e não está saindo do loop de comando e parando. Ou você está em um loop infinito ou esperando por entrada em um submenu. O gdb <fortran executable name> core finalmente mata o processo EXATAMENTE onde está pendurado.

O Ctrl + z está suspendendo o programa fortran em execução. O executável ainda está em execução quando ele é interrompido. Se você digitar o comando gdb para foreground, o programa fortran continuaria de onde estava antes do Ctrl + z .

    
por J.O. Williams 01.06.2016 / 23:29