Equivalente di ctrl c al comando per annullare un programma
-
21-08-2019 - |
Domanda
Sono in esecuzione di un programma linux a lungo in una macchina remota, e voglio fermarlo, ma il mio problema è che se uso il comando kill, allora il programma si chiude senza salvare i risultati. Normalmente quello che faccio per terminare il programma sta usando ctrl c e in tal caso il programma salva i risultati, ma in questo momento non sono nella macchina che esegue la sessione, quindi non posso fare ctrl c.
La mia domanda è: esiste un modo per fare in modo remoto l'equivalente di ctrl c
?.Soluzione
Prova:
kill -SIGINT processPIDHere
In sostanza Ctrl C invia il segnale SIGINT
(interrupt), mentre uccidere invia il segnale SIGTERM
(terminazione) per impostazione predefinita se non si specifica il segnale da inviare.
Altri suggerimenti
ctrl c solo invia un segnale SIGINT, ma c'è qualche altro segnale che è un po 'più morbido. http://www.gnu.org/software/libtool/ manuale / libc / Termination-Signals.html
Credo che è possibile utilizzare il comando kill per inviare qualche altro segnale. (Vedi l'uomo uccide per maggiori informazioni)
Se controlli il processo a distanza di lunga durata, è possibile installare un gestore di segnale per SIGTERM (vedi man signal
e man sigaction
e molti SO domande su questo argomento), per ripulire bene prima di morire.
Questa è una cosa molto comune da fare.
Ecco un esempio per mongod
Per avviare il demone dalla riga di comando:
mongod &
dopo Poi
kill -SIGINT `pgrep mongod`
Tenete a mente e nel vostro gestore di segnale, che è come un gestore di interrupt in che sei molto limitata come a ciò che si è permesso di fare in essa senza danneggiare il resto del programma . La cosa migliore che puoi fare qui è impostata una variabile atomic_t "should_quit".
che sto facendo, come di seguito strada
killall -2 <ProgramName>
o
kill -2 <PID of your process>
Ho usato per dimenticare il nome di segnale. cioè SIGINT / SIGKILL qui in modo che io sto usando il numero per quella killall come -2 o killall -9