Fechando um terminal de um aplicativo que foi iniciado naquele terminal

0

No trabalho, temos um supercomputador acessível via SSH.

Fazemos login, reservamos os núcleos usando o comando bsub com parâmetros e o último cria (a partir do doc) "uma sessão bash interativa com o pseudo-terminal".

Nesse "pseudo-terminal", vamos para uma pasta, iniciamos o solver com parâmetros e deixamos que ele seja executado até a conclusão.

Assim, o app é concluído e a sessão permanece aberta, e os núcleos reservados permanecem reservados, e alguns dias depois (se o sim terminar na sexta-feira após o trabalho), o TI envia um email na segunda-feira afirmando que os núcleos estão reservados, mas não vejo atividade, blá blá blá ...

Eu verifiquei o link e < a href="https://unix.stackexchange.com/questions/184502/bash-how-to-run-a-command-after-the-previous-finished"> Bash - como executar um comando após o término anterior ? e outros fóruns / tutoriais, mas tudo que eu acho é como manter um aplicativo em execução depois de fechar o terminal (desanexando o aplicativo de um terminal).

Eu preciso do oposto, eu quero fechar o terminal (este pode ser o último passo do solucionador, então ele pode sair do terminal e ser morto)

Estou aberto a sugestões, posso fazê-lo em um script ou posso fazer o cara codificá-lo em seu solucionador de C ++.

Eu tentei o seguinte (no meu Ubuntu Server rodando em uma VM, espero que isso funcione mais ou menos o mesmo em qualquer ambiente bash , por favor me corrija se eu estiver errado):

delay_test.c:

#include <stdio.h>
#include <unistd.h>

int main(int argc, const char *argv[])
{
    printf("Doing some fake lengthy operation...");
    sleep(15); // sleep for 15 seconds
    return 0;
}

Compila e executa conforme o esperado. Eu tentei system("clear"); (parte de stdlib.h ) antes de retornar, e isso funciona também, eu recebo a mensagem, então 15 segundos depois a tela é limpa e o aplicativo sai.

Então eu tentei system("exit"); e nada acontece (quero dizer, o aplicativo sai como se a declaração exit não estivesse lá ...). Meu melhor palpite é que o aplicativo tenha que retornar antes que alguém possa sair do terminal, mas é apenas um palpite.

Eu também tentei um script:

test.sh:

#!/bin/bash
./delay_test &
wait
exit

Nesse caso, meu entendimento diz que a instrução exit é para concluir o script, mas preciso sair da sessão do terminal quando o aplicativo em questão terminar.

Então, o que posso fazer para forçar a saída do "pseudo-terminal" após a saída do aplicativo?

    
por nurchi 28.10.2016 / 18:50

1 resposta

1

A maneira mais direta no shell fornecida pelo comando bsub é prefixar qualquer comando que você esteja executando com exec , que é um shell embutido que substituirá o shell fornecido pelo seu solver:

exec yoursolver

Quando yoursolver sair, isso retornará para bsub , pois o shell há muito tempo foi substituído pelo solver.

(Como um aparte, note que algumas linguagens (TCL, PHP) possuem uma exec que não é nada parecida com as funções shell ou Perl exec ou C exec(3) , por isso, se você estiver usando ou familiarizado com essas linguagens, tenha cuidado com essa diferença: as versões do TCL e PHP são mais parecidas com a função C system(3) ou Perl system ou digitando os comandos em um shell em que o processo original ainda está por aí. depois.)

    
por 28.10.2016 / 19:40