Prozesse anhalten

01/12/2010 - 10:42 von G | Report spam
Hallo,

kann mir jemand erklàren, was hier passiert und wie ich es besser machen
kann? Also ich enkodiere hàufiger mal Videos. Dazu lege ich mir ein fifo-
file an, in welches mencoder hineinschreibt und x264 sich seine Frames
heraus nimmt. Das ganze mache ich in screen. screen hat also zwei
Konsolen- eines für mencoder, eines für x264. Nun dauert so ein Prozess
auf meinem nicht-mehr-High-End PC seine 30 Stunden. Um in der Zeit ab und
an mal Windows zu starten fahre ich Linux über pm-hibernate einfach in
den Ruhezustand (hatte ich hier schon mal besprochen, vielen Dank für die
Hilfe nochmal).
Wenn ich jedoch unter Linux etwas machen möchte, dann möchte ich den
Vorgang mal eben anhalten, damit ich mehr CPU nutzen kann. Also habe ich
mal Strg+Z gedrückt und mencoder angehalten. Als ich ihn dann mit fg
wieder aktiviert habe wunderte ich mich nicht schlecht über das
resultierende Video: Ab der Stelle waren die Frames alle "verschoben".
Wie bei einem Kinoprojektor, wo die Bildlage falsch eingestellt ist, war
der untere Teil des Bildes oben und der obere unten. Er hat also
irgendwie "zwischen den Frames" gehangen. Das verstehe ich nicht ganz, da
ich mit der Tastenkombination den Prozess doch nur schlafen lege. Da
sollte es doch ganz egal sein, wenn ich das nicht zu einem vollstàndigen
Frame mache.
Und wie kann ich es besser machen? Ich probiere es in diesem Moment mal
indem ich x264 stoppe. Auch wenn das klappt bliebe meine Frage, was den
Fehler verursacht hat...
Entschuldigt das lange Posting.

Grüße!
 

Lesen sie die antworten

#1 Michael Baeuerle
01/12/2010 - 11:20 | Warnen spam
Günther Frings wrote:

[...] Er hat also
irgendwie "zwischen den Frames" gehangen. Das verstehe ich nicht ganz, da
ich mit der Tastenkombination den Prozess doch nur schlafen lege. Da
sollte es doch ganz egal sein, wenn ich das nicht zu einem vollstàndigen
Frame mache.
Und wie kann ich es besser machen?



Gute Frage. Du koenntest es statt mit einem FIFO File mal mit einer
unnamed Pipe probieren, das sollte aber eigentlich keinen Unterschied
machen.

Vielleicht hat einfach das lesende Programm einen Bug. Durch das SIGSTOP
koennte z.B. read() unterbrochen werden und EINTR zurueckliefern. Oder
es gibt einen Handler fuer SIGSTOP oder SIGCONT der nicht tut was er
soll.


Micha

Ähnliche fragen