Comment envoyer ctrl+c à partir d'un script bash?
Je suis de départ un certain nombre d'écrans dans un script bash, puis l'exécution de django reinhardt, runserver
commande dans chacun d'eux. J'aimerais être capable de programmation pour tous les arrêter, ce qui m'oblige à envoyer Control+c
à runserver
.
Comment puis-je envoyer ces touches de mon script bash?
- Voir aussi stackoverflow.com/questions/14696427/...
Vous devez vous connecter pour publier un commentaire.
Ctrl+C envoie un
SIGINT
signal.kill -INT <pid>
envoie unSIGINT
signal trop:En supposant
888
est votre ID de processus.Noter que
kill 888
envoie unSIGTERM
signal, ce qui est légèrement différent, mais aussi demander l'arrêt du programme. Donc, si vous savez ce que vous faites (pas de gestionnaire d'lié àSIGINT
dans le programme), une simplekill
est assez.Pour obtenir le PID de la dernière commande lancée dans le script, utilisez
$!
:man kill
: Si aucun signal n'est spécifiée, la DURÉE du signal est envoyé, de sortekill $PID
n'est pas l'envoi deSIGINT
pour le processus, et n'est donc pas le même que Ctrl+C clavier de l'événementkill -INT
,kill -SIGINT
oukill -2
.CTRL-C généralement envoie le signal SIGINT au processus de sorte que vous pouvez tout simplement faire:
à partir de la ligne de commande (ou un script), à affecter spécifiques
processID
.Je dis "en général" parce que, comme avec la plupart des UNIX, c'est près configurable à l'infini. Si vous exécutez
stty -a
, vous pouvez voir la séquence de touches est lié à laintr
signal. Ce sera probablement CTRL-C, mais que la séquence de touches peut être mappé à quelque chose d'autre entièrement.Le script suivant illustre cela en action (quoique avec
TERM
plutôt queINT
depuissleep
ne réagit pas àINT
dans mon environnement):Il commence en fait à une heure-journal
sleep
processus et saisit son IDENTIFIANT de processus. Il délivre alors le processus, les détails avant de tuer le processus.Après une petite attente, il vérifie ensuite le processus de la table pour voir si le processus est allé. Comme vous pouvez le voir à partir de la sortie du script, il est en effet révolue:
pid
d'un processus particulier comme tomcatVous pouvez obtenir le PID d'un processus particulier comme MySQL en utilisant les commandes suivantes:
ps -e | pgrep mysql
Cette commande va vous donner le PID de MySQL processus. e.g, 13954
Maintenant, tapez commande suivante dans terminal.
kill -9 13954
Cela tuera le processus de MySQL.
par exemple "pgrep -f firefox" sera grep le PID de l'exécution de 'firefox' et le sauver de ce PID dans un fichier appelé "any_file_name'. 'sed' commande ajoutera le "tuer" au début du numéro de PID dans 'any_file_name fichier. La troisième ligne de la volonté de faire de " any_file_name fichier exécutable. Maintenant, en avant de la ligne va tuer le PID est disponible dans le fichier 'any_file_name'. L'écriture ci-dessus quatre lignes dans un fichier et de l'exécution de ce fichier peut faire le contrôle-C. Travail absolument parfait pour moi.