In meinem Beispiel führe ich einen Befehl aus, dessen Ausführung sehr lange dauert (mehrere Stunden).
Ich erinnere mich nicht wirklich, ob ich make oder make -j4 eingegeben habe.
Natürlich könnte ich es stoppen und die Taste drücken oder den Verlauf überprüfen, um es zu erfahren, aber das würde den Prozess stoppen und ich möchte nicht, dass das passiert (falls es bereits make -j4 ausführt).
Gibt es eine Möglichkeit zu wissen, welcher Befehl ausgeführt wird, ohne den Prozess anzuhalten?
command-line
make
Daniel Viaño
quelle
quelle
pgrep -a make
make
Sie es stoppen und neu starten und es sollte dort weitermachen, wo es aufgehört hat.Antworten:
Wenn Sie die vollständige Befehlszeile für jede
make
auf Ihrem Computer ausgeführte Instanz anzeigen möchten , öffnen Sie ein neues Terminal und versuchen Sie Folgendes:pgrep
ist ein Programm, das alle Prozesse auf Ihrem Computer durchsucht. In diesem Fall wird nach Programmen mit dem Namen gesuchtmake
. Die Option-a
sagtpgrep
zur Liste sowohl die Prozess - ID und die vollständige Befehlszeile für jeden Anpassungsprozess. (Ohne-a
würde es nur die Prozess-ID zurückgeben.) Weitere Informationen zu den vielen Optionen von pgrep finden Sie unterman pgrep
.quelle
pgrep
würden, anders aussehen als der Befehl, der in der Befehlszeile eingegeben wurde.Während das Terminalfenster aktiv ist, können Sie den Vorgang durch Drücken von Ctrl+ anhalten (anhalten) Z. Sie können den Job dann durch Eingabe im Hintergrund verschieben
bg
(Ihr Job wird nun im Hintergrund fortgesetzt und Sie können gleichzeitig in der Befehlszeile arbeiten; dies entspricht dem Starten eines Jobs&
am Ende der Befehlszeile). Verwenden Sie dann die Cursortasten (nach oben und unten), um festzustellen, welchen Befehl Sie verwendet haben. Wenn Sie möchten (dies ist jedoch nicht erforderlich), können Sie Ihren Job durch Eingabe in den Vordergrund rückenfg
.quelle
for X in {1..1000} ; do sleep $X ; done
eingeben, wird die Schleife unterbrochen und verbleibende Iterationen werden nicht ausgeführt.jobs
anzuhalten , den Verlauf zu überprüfen (oder , wie in der Antwort von @ ichabod gezeigt) und ihn dann über fortzusetzenfg
.Ich mache so etwas wie Stefan: ^ Z, um den Job anzuhalten, und dann laufe ich
jobs
. Wenn mehrere Prozesse ausgeführt werden, müssen Sie möglicherweise herausfinden, welcher Job angehalten wurde. In der Regel wird jedoch die Befehlszeile angezeigt. Führen Sie dann ausfg
, um die Ausführung fortzusetzen.quelle
Eine gute Möglichkeit, dies dynamisch zu sehen, ist das Ausführen von top. Dies gibt Aufschluss über den Gesamtsystemstatus und die auf dem System ausgeführten Prozesse.
Wenn Sie ein 'ps ux' ausführen, werden Ihre Prozesse zusammen mit pid und anderen Informationen angezeigt. Sie können Fertigkeiten verwenden, um einige von ihnen auszuschalten, wenn Sie dies wünschen. Die Manpage für diese Ressource ist eine gute Ressource Eingehangene Gerätewartezeiten usw. Sie können auch andere Signale an Prozesse wie -hup senden, um Daemons neu zu starten usw.
Top ist schön, da es die Prozessgröße, die verstrichene Zeit und die aktuellen CPU-Zustände sowie den Speicher- und Auslagerungszustand anzeigt.
Ich mache oft ein $ make> & make.out & und dann less oder tail -f in der make.out-Protokolldatei. Seitdem ist make als Prozess von meiner Shell-Sitzung getrennt.
quelle