Umleiten von stdout, & stderr aus hintergrund-Prozess
Habe ich ein Skript namens "foo", die das Programm ausführt a.exe und schickt die timing-Statistiken, um eine Datei, die Zeit.melden Sie
#!/bin/bash
date 1>> time.log
(time ./a.exe) 2>> time.log
Dies funktioniert, wenn ich das Skript im hintergrund von meinem terminal und halten meine shell öffnen, bis a.exe beendet, aber wenn ich das Skript im hintergrund und verlassen Sie mein terminal (a.exe dauert eine lange Zeit zu laufen)
foo &
exit
wenn ich zurückkomme, a.exe ausgeführt wurde aber die Zeit, die Statistiken nicht erscheinen, in meine log-Datei. Weiß jemand, warum das so ist? Gibt es eine Möglichkeit, um die timing-Statistiken nach dem habe ich geschlossen, die übergeordnete shell?
Dank
InformationsquelleAutor frankscup | 2010-11-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beim beenden der shell sendet er ein SIGHUP-signal an alle Kind-Prozesse, welche standardmäßig tötet Sie. Wenn Sie möchten, dass ein Prozess weiterhin ausgeführt, selbst wenn die übergeordnete shell beendet, dann müssen Sie es ignorieren, das SIGHUP.
InformationsquelleAutor John Kugelman
Da ist die Frage tagged as
bash
auch, ich zitiere ausman bash
Dies ist praktisch, wenn Sie begann einen job, aber vergessen Präfix mit
nohup
. Nur tunInformationsquelleAutor dennycrane
Vergessen Sie nicht, entfernen Sie alle Verweise auf die tty/pts, 0</dev/null entfernt stdin Referenz.
InformationsquelleAutor Rahly
Ihre a.exe getötet wird, wenn Sie in der Nähe der Eltern-shell.
Könnten Sie Bildschirm, führen Sie den Befehl wie üblich ein und den Bildschirm zu verlassen. Dies hält den Prozess von immer getötet, wenn die parent-shell wird beendet. Diese Methode ist ein wenig umständlich, aber könnte nützlich sein, in anderen Situationen.
John gab eine viel bessere Antwort parat - mit nohup.
screen
odertmux
. Diese Programme geben Ihnen viel mehr Flexibilität in der job-Verwaltung und Fenster-management.InformationsquelleAutor harithski
Versuchen:
InformationsquelleAutor khachik