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?