2017-03-06 6 views
0

Ich habe ein Bash-Skript, das einen Hauptbefehl ausführen wird, sagen wir für eine Stunde. Ich möchte nach einer gewissen Zeit seit dem Start des Hauptbefehls (bei t_x) noch einen weiteren Befehl ausführen. Etwas wie dieses:Wie führe ich einen Befehl nach einer bestimmten Zeit aus, während ein anderer Befehl ausgeführt wird?

Hauptstarts -------> Hauptenden | | zum Zeitpunkt t_x wird die zweite Befehl

Im Moment ausgeführt Ich habe so etwas wie dies:

mpirun main_command & sleep 1m && second_command 

und das Problem ist, dass nach dem zweiten Befehl ausgeführt wird, wird der Haupt Befehl getötet. Kann mir jemand helfen? Vielen Dank!

+0

Sie können versuchen, etwas wie: '(Schlaf 80 &); ls; Schlaf 5; ps'. Anstelle von "Schlaf", "ls" und "PS" können Sie andere Befehle verwenden. – linuxfan

+1

Es ist für mich zumindest unklar, was das eigentliche Problem ist. –

+0

@MarkSetchell: Die Ausgabe des Hauptbefehls ist fehlerhaft (wenn der Hauptbefehl beendet ist); also möchte ich eine Kopie seiner Ausgabe machen, bevor der Hauptbefehl beendet ist; Ich weiß, zu welcher Zeit ich die Kopie machen sollte; aber anstatt es manuell zu tun, möchte ich es zerstäuben. Das Problem mit dem Schlaf ist, dass es den Hauptbefehl tötet, bevor er tatsächlich beendet ist. –

Antwort

0

Der erste Befehl kann die Konsole nicht sperren, da ein anderer Prozess sie ebenfalls verwendet. Sie müssen die Standard-IO-Pipelines umleiten, 0<&- mpirun main_command >/dev/null 2>/dev/null Wenn dies immer noch nicht funktioniert, verwenden Sie shell -c 'mpirun main_command' & sleep 1m;second_command Sie können ; anstelle von && verwenden, es sei denn, Sie benötigen einen fehlgeschlagenen Beendigungscode, wenn jemand den Ruhezustand unterbricht.

Verwandte Themen