Befehl im Hintergrund starten, und später in Vordergrund holen

04/12/2007 - 10:58 von Manuel Reimer | Report spam
Hallo,

ich hatte vor kurzem den Fall, etwas in dieser Form ausführen zu wollen:

#!/bin/bash
ffmpeg &
sleep 1
v4lcfg
fg

Idee dahinter: Erst ffmpeg anstarten und auf /dev/video0 verbinden.
Danach warten, dass ffmpeg die Verbindung auch wirklich offen hat. Nun
via v4lcfg das Device konfigurieren (ffmpeg "killt" beim Start diese
Konfig). Nach der Konfiguration soll der Benutzer wieder die Steuerung
über ffmpeg erhalten, also via "fg" wieder holen.

Genau das schlàgt aber jetzt fehl. Ich bekomme das ffmpeg aus einem
Shellscript heraus nicht mehr in den Vordergrund.

Gelöst habe ich das dann letztlich genau umgekehrt.

Das Script startet sich beim Start selbst mit dem Parameter "configure"
als Hintergrundprozess neu und öffnet direkt danach ffmpeg im
Vordergrund. Die zweite, mit "configure" geöffnete Instanz wartet nun
eine Sekunde und setzt die Einstellungen.

Warum funktioniert "fg" im Shellscript nicht und wie àndert man das?

CU

Manuel

Überwachungsstaat bald Realitàt? Jetzt handeln! www.stasizwopunktnull.de
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ ¯¯¯¯¯¯¯¯¯¯¯¯¯
Die letzte Stimme, die man hört, bevor die Welt untergeht, wird die
eines Experten sein, der versichert, das sei gar nicht möglich.
 

Lesen sie die antworten

#1 Helmut Waitzmann
04/12/2007 - 20:49 | Warnen spam
Manuel Reimer writes:

Hallo,

ich hatte vor kurzem den Fall, etwas in dieser Form ausführen zu wollen:

#!/bin/bash
ffmpeg &
sleep 1
v4lcfg
fg



[...]

Genau das schlàgt aber jetzt fehl. Ich bekomme das ffmpeg aus einem
Shellscript heraus nicht mehr in den Vordergrund.

Warum funktioniert "fg" im Shellscript nicht und wie àndert man das?



Damit es funktioniert, muss »job control« eingeschaltet sein (und das
Betriebssystem es unterstützen). Das »bash« hat es als Voreinstellung
nur bei interaktiven Shells eingeschaltet, siehe die Beschreibung des
Shell-Kommandos »set« im Manual Page »bash(1)«:

-m Monitor mode. Job control is enabled. This option is
on by default for interactive shells on systems that
support it (see JOB CONTROL above). Background pro‐
cesses run in a separate process group and a line con‐
taining their exit status is printed upon their comple‐
tion.

Was liefert folgendes Shell-Skript, wenn Du es einmal mit Parameter »an«,
einmal mit Parameter »aus« und einmal ohne Parameter startest? Damit
sollte das »bash« Farbe bekennen:

schnipp
#!/bin/sh
case "${1-}" in
an)
set -m
printf >&2 '%s: ich versuche, job control einzuschalten' "$0"
;;
aus)
set +m
printf >&2 '%s: ich versuche, job control auszuschalten' "$0"
;;
'')
;;
*)
printf >&2 '%s: Syntax:%s%s an%s aus' \
"$0" "$0" "$0" "$0"
exit 1
esac &&
{
sleep 1 &
ps -o 'ppid sid pgid pid stat args'
fg
}
schnapp
Wer mir E-Mail schreiben will, stelle | When writing me e-mail, please
bitte vor meine E-Mail-Adresse meinen | precede my e-mail address with
Vor- und Nachnamen, etwa so: | my full name, like
Helmut Waitzmann , (Helmut Waitzmann)

Ähnliche fragen