Voglio avviare un paio di lavori su macchine diverse usando ssh. Se l'utente interrompe lo script principale, voglio chiudere tutti i lavori con garbo.Avviare un processo su ssh usando bash e quindi ucciderlo su sigint
Ecco un breve esempio di quello che sto cercando di fare:
#!/bin/bash
trap "aborted" SIGINT SIGTERM
aborted() {
kill -SIGTERM $bash2_pid
exit
}
ssh -t remote_machine /foo/bar.sh &
bash2_pid=$!
wait
Tuttavia il processo è ancora in esecuzione bar.sh macchina remota. Se eseguo gli stessi comandi in una finestra di terminale, arresta il processo sull'host remoto.
C'è un modo semplice per farlo accadere quando eseguo lo script di bash? O devo fare in modo che acceda al computer remoto, trovi il processo giusto e lo uccida in questo modo?
edit: Sembra che devo andare con l'opzione B, uccidendo il RemoteScript tramite un'altra connessione ssh
Quindi non voglio sapere come ottengo il remotepid? Ho provato un qualcosa sulla falsariga di:
remote_pid=$(ssh remote_machine '{ /foo/bar.sh & } ; echo $!')
Questo non funziona in quanto blocca.
Come attendere la stampa di una variabile e quindi "rilasciare" un sottoprocesso?
Hai provato una trappola nel tuo script remoto? Forse SIGHUP? –
Ho provato a intrappolare tutti i segnali a cui riesco a pensare senza alcun successo ... Immagino che dovrò solo ssh alla macchina remota di nuovo ed eseguire kill sulla sceneggiatura, ma poi ho bisogno del pid di il processo remoto ... – getekha
Provate 'pkill' se è così che andrete. Grezzo ma solitamente efficace – bstpierre