2016-05-28 1 views
1

Ich bin neu in UNIX, so dass ein kleines Problem auf Oracle SOLARIS 11 Virtual Betriebssystem für UNIX.UNIX geht in den unbrauchbaren Modus nach der Eingabe bestimmter Befehle wie CAT

Das Problem ist, dass nach Eingabe bestimmter Befehle wie CAT usw. UNIX Command Line in einen unbrauchbaren Modus geht, nach dem kein neuer Befehl funktioniert, bis Sie das Terminal manuell mit der Maus schließen und neu starten.

Ich möchte einen Weg kennen, mit dem ich sofort weiter mit nächsten Anweisungen arbeiten kann, auch wenn ich solche Befehle wie CAT (die nächste Befehle nicht funktionieren) eingeben, ohne das gesamte Terminal zu schließen und neu zu starten. Respekt für Ihre kostbare Zeit

Ich habe einen Screenshot zu meinem Problem leicht verständlich machen Sie:

enter image description here

+0

Ich stimme für das Schließen dieser Frage als Off-Topic ab, da es sich bei dieser Frage nicht um Programmierung handelt. Ich nehme an, dass es für den Stackexchange von Linux & UNIX geeignet wäre. –

Antwort

1

Press Ctrl +C die Katze Prozess zu töten. Cat erwartet Benutzereingaben von stdin und das ist der Grund, warum der Prozess nicht stoppt, wenn Sie nicht explizit angeben, dass Sie ihn stoppen möchten.

Weitere Informationen finden Sie unter Unix signals.

+0

Yup! sein Arbeiter bedankt sich sehr, aber wird es auch mit anderen Befehlen funktionieren, wenn ich auf eines stoße? Ist Strg + C ein allgemeiner Hotkey? – Anonymous

+0

Die meisten Prozesse dienen dem Signal SIGINT (das mit der Kombination Ctrl + c ausgelöst wird), weil es ziemlich wichtig ist, wie Ihre Erfahrung bestätigt! Sie können es immer in anderen Prozessen ausprobieren und sehen, ob es funktioniert. – Sevle

1

In diesem speziellen Fall, in dem Sie einen Befehl nicht korrekt ausgeführt haben und Ihr Terminal in einen unbrauchbaren Modus versetzt wurde, ist die Antwort von Sevle die, die Ihnen hilft.

Meine Antwort ist für den Fall, dass Sie den richtigen Befehl im richtigen Format eingegeben haben, wodurch die Ausführung des Befehls gestartet wurde, jetzt dauert der Befehl lange und gibt Ihnen das Terminal zurück. In solchen Szenarien, in denen Sie vorher wissen, dass einige Befehle lange dauern können folgende

<command> & 

was zu beenden, tun tut, ist, um den Befehl zu feuern und dann den Prozess von dem Befehl im Hintergrund erzeugt schieben, so dass Sie können das Terminal für Ihre weitere Arbeit zurückholen, ohne auf die Beendigung des Befehls warten zu müssen. Der obige Befehl würde Ihnen eine Prozess-ID zurückgeben, mit der Sie den Prozess bei Bedarf wieder in den Vordergrund bringen können.

Sobald Sie das Terminal wieder nach beigefügten mit ‚&‘ Zeichen Befehl Brennen, verwenden Sie den Befehl

ps 

die Liste aller Prozesse zu erhalten, die jetzt ausgeführt werden. Sie sehen die Prozesse, die gerade auf Ihrer Maschine ausgeführt werden, einschließlich des Prozesses für Ihren Befehl. Sie können die Prozess-ID aus dieser Liste oder aus dem Rückgabewert direkt nach dem Absetzen des Befehls verwenden, um den Prozess in den Vordergrund zu setzen. Verwenden Sie den folgenden Befehl für die -

fg 
+0

Vielen Dank für die ausführliche Antwort. Lass meinen Ruf 15 erreichen und ich gebe dir einen Daumen hoch ... du verdienst es. Ich habe eine Frage, dass, wenn ich mit einem Befehl arbeiten muss, warum muss ich es töten und es als Hintergrundprozess machen? Muss ich diesen Befehl nicht ausführen? Ich bin ein Neuling, also nichts dagegen. Danke – Anonymous

+0

Danke ... glücklich, zu helfen :) ... für deine Frage, einen Prozeß zum Hintergrund zu senden und den Prozeß zu töten sind zwei völlig unterschiedliche Sachen. Das Beenden eines Prozesses bedeutet, dass der Prozess angehalten wird, um ausgeführt zu werden. Es ist wie 'Task beenden' aus dem Task-Manager in Windows-Maschine. Das Senden eines Prozesses an den Hintergrund bedeutet, dass das Terminal nur freigegeben wird und der Prozess weiterhin im Hintergrund ausgeführt wird. – SubhasisM

+0

In Bezug auf ihre jeweiligen Bedürfnisse .... sagen Sie, dass Sie ein Skript ausführen müssen, das eine Datei verarbeitet und eine Ausgabedatei erzeugen würde. Wenn nun die Datei in einer großen Datei gespeichert wird, würde das Skript wahrscheinlich einige Zeit benötigen, um es zu verarbeiten. Während der ganzen Zeit würde Ihr Terminal mit diesem Skript beschäftigt sein, würde das Terminal nicht freigeben und Ihnen eine Eingabeaufforderung geben. In dieser Situation gewinnen Sie nichts, wenn Sie das Terminal halten, da Sie sich nur mit der Ausgabedatei beschäftigen und die Sie nur erhalten, wenn die Dateiverarbeitung endet. In dieser Situation senden wir den Prozess in den Hintergrund und fahren mit der nächsten Arbeit fort. – SubhasisM

2

Wie bereits erwähnt, Unix geht nicht in einem unbrauchbaren Zustand, sondern einfach das tut, was Sie es gefragt zu tun. Hier liest cat seinen Standard-Eingang (Tastatur) und zeigt ihn ohne weitere Bearbeitung auf seinem Standard-Ausgang (Terminal) an.

Es gibt viele andere Standard-Unix-Dienstprogramme, die ihre stdin lesen und ihr stdout schreiben. Dies ist die gebräuchlichste Methode, komplexe Befehle aus einfacheren unter der Unix-Philosophie zu erstellen.Der sauberere Weg zum Beenden des Prozesses besteht darin, das Ende des Dateizeichens einzugeben, üblicherweise Steuerung + D.

Während beide Steuerung + C und Steuerung + D werden Sie wieder die Kontrolle über die Befehlszeile geben, im letzteren Fall der Prozess nicht unterbrochen wird, sondern einfach endet, weil es nichts mehr zu lesen.

Alternativ, wenn Sie den Prozess nicht beenden, aber das Shell-Steuerelement trotzdem wiederherstellen möchten, haben Sie normalerweise die Möglichkeit, den laufenden Prozess zu unterbrechen und möglicherweise später im Hintergrund zu platzieren. Sie können dies mit Steuerelement + Z und dann den bg Befehl tun.

Beachten Sie auch, dass manchmal Prozesse ignorieren Steuerung + C, wenn Steuerung + D funktioniert auch nicht, können Sie versuchen, das stärker quit Signal zu senden, in der Regel mit Steuerung + \, die zusätzlich zu dem Programm das Binärbild in einer Datei (Kern) für das spätere Debugging ablegen wird.

Verwandte Themen