Ein lang laufendes Programm im Terminal anhalten?

17

Gibt es eine Tastenkombination, mit der ich ein im Terminal laufendes Programm anhalten kann? Für den Fall, dass es wichtig ist, habe ich nicht die Absicht, irgendetwas anderes in diesem Terminal auszuführen, während das Programm angehalten ist. Ich möchte nur die Programmausführung anhalten und später fortsetzen. Wie kann ich das machen?

becko
quelle
Welches Programm genau?
jobin
@Jobin Ein Programm, das ich in C ++ geschrieben habe. Aber ich möchte den Quellcode nicht ändern.
Becko
Möchten Sie den Vorgang nach einem Neustart oder ähnlichem fortsetzen?
jobin
@Jobin Nein, ich möchte nicht neu starten. Ich möchte später weitermachen, aber ich werde das System nicht in der Mitte neu starten.
Becko

Antworten:

17

Drücken Sie Control+ Z.

Dadurch wird der Prozess angehalten und Sie kehren zu einer Shell zurück. Sie können jetzt andere Dinge tun, wenn Sie möchten, oder Sie können zum Hintergrundprozess zurückkehren, indem Sie %gefolgt von eingeben Return.

Beachten Sie, dass Sie, wenn Sie dies für etwas tun, das reaktionsfähig sein muss, das System nanotanken werden. Wenn es sich jedoch nur um eine Instanz handelt, sollte alles in Ordnung sein.

Oli
quelle
Ist es sicher, den Terminalprozess anzuhalten?
Pandya
@ Pandya: Warum nicht?
jobin
@ Pandya Ich bin mir sicher, dass das vom Prozess abhängt ... Wenn etwas sehr zeitkritisch ist, wird es möglicherweise nicht ausgesetzt, aber die meisten Dinge sollten in Ordnung sein.
Oli
15

Dies ist die Bash-Job-Kontrolle

Verwenden Sie CTL-Z , um den Job zu stoppen.

Dann können Sie bg eingeben , um es im Hintergrund auszuführen, wenn es nur einen Job gibt, tut es genau das.

Wenn Sie mehr als einen Job haben, können Sie ihn auflisten und mit fg% N und bg% N den gewünschten Effekt erzielen.

Beispiel:

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] + find / usr -name gestoppt 

ubuntu @ ip-10-170-59-120: ~ $ jobs
[1] + find / usr -name "* .so" gestoppt

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
...

Für alles andere, was nicht mit dem TTY verbunden ist, können Sie SIGSTOP und SIGCONT verwenden . Wenn Sie zum Beispiel glauben, dass ein Daemon Probleme verursacht, aber nicht wissen, um welchen es sich handelt, können Sie den PID-SIGSTOP senden. Es ist, als würden Sie eine Pause einlegen und dann nach Änderungen suchen finde das Problem.

Hoffe das hilft.

ppetraki
quelle
1
Gute Antwort! Darf ich nur hinzufügen, dass es nicht nur eine Bash-Sache ist? Die Korn-Shell funktioniert genauso.
Sergiy Kolodyazhnyy
4

Ich weiß, dass diese Antwort etwas spät ist, aber Sie können die Verknüpfung verwenden Ctrl+s, um Ihr Programm zu stoppen (wenn Sie die Ausgabe oder etwas Ähnliches lesen möchten), dann können Sie die Verknüpfung weiter verwenden Ctrl+q.

Sidahmed
quelle