Ein "Hintergrundjob" ist nur einer, der nicht mit dem Benutzer interagiert - er kontrolliert nicht das tty und erledigt einfach seine Sache (im Allgemeinen im Hintergrund). Ein Vordergrundjob ist das Gegenteil, er hält die Kontrolle über das tty, um mit dem Benutzer zu interagieren.
Strg-Z unterbricht den letzten Vordergrundprozess (den letzten Prozess, der mit dem tty interagiert) (es sei denn, dieser Prozess unternimmt Schritte, um die Unterbrechung zu ignorieren, wie es Shells normalerweise tun). Dies bringt Sie im Allgemeinen zurück zu Ihrer Shell, von der aus Sie im Allgemeinen den Befehl bg
eingeben können um den gerade angehaltenen Prozess in den Hintergrund zu verschieben (und ihn weiter laufen zu lassen) oder fg
um es wieder in den Vordergrund zu bringen.
Durch Drücken von Strg+Z wird der TSTP
gesendet Signal an Ihren Prozess. Dadurch wird die Ausführung angehalten (der Kernel plant keine weitere CPU-Zeit für den Prozess ein) und der Prozess wartet auf ein CONT, um die Verarbeitung fortzusetzen.
Sie können dies über kill -TSTP
emulieren/replizieren und kill -CONT
(seit kill
wird trotz des Namens ein nominiertes Signal an Ihren Prozess senden!)
Die Shell hat die Funktionalität, den Prozess in den Hintergrund zu stellen, aber dies ist eine Beziehung zwischen der Shell und dem Prozess. Der Prozess selbst hat nicht wirklich das Konzept von „Hintergrund“ oder „Vordergrund“.
Weitere Informationen finden Sie hier.
Betrachten Sie diesen Befehl, der ca. 4,5 Sekunden auf meinem Laptop:
echo 2^10000000 | bc -lq | wc -c
Wenn Sie Strg drücken +Z , wird die Berechnung ausgesetzt. Sie haben die Möglichkeit, die Berechnung im Vordergrund mit fg
fortzusetzen , oder setzen Sie es mit bg
im Hintergrund fort . Letzteres entspricht mehr oder weniger der Ausführung von:
echo 2^10000000 | bc -lq | wc -c &