Vous interrompez un programme de longue durée dans le terminal?

17

Existe-t-il une combinaison de touches du clavier que je peux utiliser pour suspendre un programme en cours d'exécution dans le terminal? Dans le cas où cela importe, je n'ai pas l'intention d'exécuter quoi que ce soit d'autre à l'intérieur de ce terminal pendant que le programme est en pause. Je veux juste suspendre l'exécution du programme et la reprendre plus tard. Comment puis-je faire ceci?

Becko
la source
Quel programme exactement?
jobin
@Jobin Un programme que j'ai écrit en C ++. Mais je ne veux pas changer le code source.
Becko
Voulez-vous reprendre le processus après un redémarrage ou quelque chose?
jobin
@Jobin Non, je ne veux pas redémarrer. Je veux reprendre plus tard, mais je ne redémarrerai pas le système au milieu.
Becko

Réponses:

17

Appuyez sur Control+ Z.

Cela suspendra le processus et vous ramènera à un shell. Vous pouvez faire d'autres choses maintenant si vous le souhaitez ou vous pouvez revenir au processus d'arrière-plan en entrant %suivi de Return.

Notez que si vous faites cela pour quelque chose qui doit être réactif, vous allez tanker le système, mais si c'est juste quelque chose comme une nanoinstance, tout devrait bien se passer.

Oli
la source
Est-il sûr de suspendre le processus terminal?
Pandya
@Pandya: Pourquoi pas?
jobin
@Pandya Je suis sûr que cela dépend du processus ... Si quelque chose est très sensible au temps, il ne devrait pas être suspendu, mais la plupart des choses devraient aller.
Oli
15

C'est le contrôle des tâches bash

Utilisez CTL-Z pour arrêter le travail.

Ensuite, vous pouvez taper bg pour l'exécuter en arrière-plan, s'il n'y a qu'au travail, il fait exactement cela.

Si vous en avez plusieurs, vous pouvez utiliser les tâches à répertorier, puis utiliser fg% N et bg% N pour obtenir l'effet souhaité.

Exemple:

ubuntu @ ip-10-170-59-120: ~ $ find / usr -name "* .so"
/usr/lib/python2.7/dist-packages/OpenSSL/crypto.so
/usr/lib/python2.7/dist-packages/OpenSSL/SSL.so
/usr/lib/python2.7/dist-packages/OpenSSL/rand.so
/usr/lib/python2.7/dist-packages/gi/_glib/_glib.so
/usr/lib/python2.7/dist-packages/gi/_gobject/_gobject.so
/usr/lib/python2.7/dist-packages/gi/_gi.so
/usr/lib/python2.7/config/libpython2.7.so
...
^ Z
[1] + Recherche / usr arrêtée -nom 

ubuntu @ ip-10-170-59-120: ~ $ jobs
[1] + Recherche / usr -name "* .so" arrêtée

ubuntu @ ip-10-170-59-120: ~ $ fg% 1
find / usr -name "* .so"
/usr/lib/php5/20090626+lfs/apc.so
/usr/lib/php5/20090626+lfs/memcache.so
/usr/lib/php5/20090626+lfs/mysql.so
...

Pour tout autre élément non attaché au TTY, vous pouvez utiliser SIGSTOP et SIGCONT . Ainsi, par exemple, si vous pensez qu'un démon cause des problèmes mais que vous ne savez pas de quel type il s'agit, vous pouvez envoyer le pid SIGSTOP, c'est comme appuyer sur pause, puis vérifier les changements, OK ce n'est pas ça, et rincer et répéter jusqu'à ce que vous trouver le problème.

J'espère que cela t'aides.

ppetraki
la source
1
Bonne réponse! Puis-je simplement ajouter que ce n'est pas seulement quelque chose de bash? La coquille Korn fonctionne de la même manière.
Sergiy Kolodyazhnyy
4

Je sais que cette réponse est un peu en retard, mais vous pouvez utiliser le raccourci Ctrl+spour arrêter votre programme (si vous voulez lire la sortie ou quelque chose comme ça), vous pouvez continuer à utiliser le raccourci Ctrl+q.

Sidahmed
la source