[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [Debian]: Zwei Newbie Fragen



On Sun, Mar 07, 1999 at 04:15:23PM +0100, Frederick Page wrote:
> 
> 1. Wenn ich einen Prozeß mit Ctrl-Z in den Hintergrund "forke", wie
>    krieg ich den anschließend wieder "zurück"?
> 
Das ist unter dem Stichwort job control der jeweiligen Shell erklärt:
bg läßt ihn im background weiterlaufen; fg holt ihn in den foreground
zurück; jobs zeigt alle irgendwie laufenenden/gestoppten usw.
Prozesses der jeweiligen Shell an.

> 2. In meinem ~/.bash_profile habe ich folgende Zeile:
> 
>    signify --fifo=$HOME/.signature  &
> 
>    Dies startet das Perl-Skript "signify", welches meine Signaturen
>    random generiert. Wenn ich nun auf einer anderen Konsole nochmals
>    als "fpage" einlogge, dann kommt signify "durcheinander", beendet
>    sich oder zeigt sonstiges, unerwünschtes Fehlverhalten.
> 
>    Wie kann ich (irgendeine if-Abfrage?) erreichen, daß signify nur
>    dann gestartet wird, wenn es noch nicht läuft?
>    

Eine Möglichkeit (da Du ja perl nimmst) wäre, daß das perl script in
einer lock-Datei mit fest vorgegebenen Namen seine eigene PID ablegt.
Diese Datei wird vor dem eigentlichen Aktionen des Scripts auf ihre
Existenz überprüft und wenn nicht vorhanden angelegt und die eigene
PID reingeschrieben. Existiert das lockfile, wird es geöffnet und die
PID ausgelesen. Dann kann man noch, um sicher zu gehen, unter /proc
nachschauen, ob es diesen Prozeß tatsächlich noch gibt oder besser
(weil portabel), das Perl-Modul Proc::ProcessTable (vom CPAN)
verwenden. Wenn der Prozeß noch existiert und es bereits dein
Perlscript ist, dann exit(1);

Schau mal unter /var/run. Dort legen einige Prozesse ihre Files mit der
PID ab. Du solltest allerdings Deine lock-Datei irgendwo in Deinem
Home-Bereich anlegen (lassen).

Wenn Du das perlscript nicht anfassen willst, kannst Du auch alles
im profile erledigen: In $! bekommst Du die PID des zuletzt
gestarteten Backgroundprozesses. Mit "test" kannst Du die Existenz
einer Datei abfragen. Mit "echo $! > ~/.signify-lock" schreibst Du die
PID in das lockfile. Auf diese Weise könntest Du also auch im
.bash_profile schreiben:

---8<----8<----8<----8<----8<----8<----8<-
# start signify, if it's not yet running
lock=~/.signify-lock
unset signify
if [ -s $lock ]
then
  pid=`cat $lock`
  cmdl=/proc/$pid/cmdline
  if [ -s $cmdl ]
  then
    case `cat $cmdl` in
      *signify*) echo signify already running ;;
	  *) signify=1 ;;
    esac
  else
    signify=1
  fi
else
  signify=1
fi

if [ -n "$signify" ]
then
  signify --fifo=$HOME/.signature  &  
  echo -n $! > $lock
fi
---8<----8<----8<----8<----8<----8<----8<-

Hab' das zwar jetzt nicht bis ins letzte getestet (zumindest gibts
keine Syntaxfehler und das Lockfile wird auch angelegt), sollte aber
prinzipiell so gehen. Könnte ich eigentlich auch so nehmen (s.u.),
allerding nehme ich ein simples shell script, statt perl zu bemühen.

> Sorry wegen der "Blödheit" der Fragen.

Wie sagt man doch so schön: Es gibt keine dummen Fragen.
Allerdings hatten die Fragen an und für sich nichts mit Debian zu tun,
aber was macht man nicht alles für newbies :-)

Gruss,
Karlheinz.
-- 
We have a equal opportunity Calculus class -- it's fully integrated.
------------------------------------------------
Um sich aus der Liste auszutragen schicken Sie
bitte eine E-Mail an majordomo@jfl.de die im Body
"unsubscribe debian-user-de <deine emailadresse>"
enthaelt.
Bei Problemen bitte eine Mail an: Jan.Otto@jfl.de
------------------------------------------------
Anzahl der eingetragenen Mitglieder:     641


Reply to: