Wie kann ich einen Prozess in den Hintergrund rücken und seine Ausgabe stumm schalten?

11

Angenommen, ich starte einen Prozess im Terminal und er sendet während der Ausführung eine Ausgabe an den Standardfehler. Ich möchte den Prozess in den Hintergrund rücken und ihn gleichzeitig zum Schweigen bringen.

Gibt es eine Möglichkeit, dies zu tun, ohne den Prozess anzuhalten und ihn mit &und erneut zu starten > /dev/null 2>&1? Ich frage mich, ob es einen Befehl gibt, der ausgeführt wird bg und auch die Ausgabedeskriptoren des Zielprozesses ändern kann.

Dan
quelle

Antworten:

9

Zu spät. Nachdem ein Prozess gestartet wird, hat Shell keine Kontrolle mehr über Prozess Filedeskriptoren , so dass Sie nicht können zum Schweigen bringen es von einem Shell - Befehl.

Sie können nur versuchen , a SIGHUPfür den Prozess zu töten . Wenn Ihr Prozess damit richtig umgeht , sollte er sich von der Steuerung von tty lösen . Leider gehen viele Softwareprogramme nicht richtig damit um und sterben einfach ab.

andcoz
quelle
Kannst du nicht STRG + Z drücken, um den Prozess in den Hintergrund zu stellen? Es bringt den Prozess nicht zum Schweigen, und wenn Sie sich abmelden, wird der Prozess meiner Meinung nach auch abgebrochen.
Roy Rico
1
@RoyRico, tötet ein SIGSTOPein Verfahren (oder wie Sie sagen tun CTRL + Z ) nicht zum Schweigen bringt keinen Prozess. Es stoppt einen Prozess!
andcoz
5

Bei dem Prozess, der von einem Terminal ausgeführt wird, sind stdin, stdout und stderr an das Terminal gebunden, und Sie können nichts dagegen tun, ohne die Kontrolle über dieses Terminal wiederzugewinnen ... Normalerweise. Es gibt jedoch einige knifflige Tools, mit denen Sie dies tatsächlich tun können. Schauen Sie sich dieses Beispiel an . Und andere Programme wie dort rettyerwähnt.

rozcietrzewiacz
quelle
3

Ich bin mit andcoz nicht einverstanden, dass es zu spät ist, die Ausgabe zum Schweigen zu bringen.

Angenommen, der Prozess wird im Vordergrund ausgeführt, verwenden Sie ihn Ctrl-Z, um den Prozess anzuhalten. Dadurch werden die Auftragsnummer und die Prozess-ID gemeldet. Sie können den Prozess mit bg %1(für Job Nr. 1) in den Hintergrund verschieben . Obwohl dies den Prozess in den Hintergrund rückt, wird die Ausgabe nicht stummgeschaltet. Um die Ausgabe stumm gdbzu schalten, können Sie alle Ausgaben umleiten /dev/null.

Dies wurde zuvor unter /programming/593724/redirect-stderr-stdout-of-a-process-after-its-been-started-using-command-lin/593764#593764 sehr gut beschrieben .

Mike Covington
quelle
0

Ein weiteres Befehlszeilenprogramm ist detach. Die neueste Version unterstützt das Schreiben von PID-Dateien, das Verwenden von Dateien für stdin, stdout und stderr und das Ausführen im Vordergrund. (Die Website von detachdiskutiert auch ähnliche Tools.)

http://inglorion.net/software/detach/

paul
quelle