Mailinglist Archive: opensuse-de (4938 mails)

< Previous Next >
Re: Jobkontrolle
  • From: eilert@xxxxxxxxxxxxxxxxxxxxxxxx (Eilert Brinkmann)
  • Date: Mon May 29 07:30:45 2000
  • Message-id: <xtt4s7hiziy.fsf@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>



"Matthias Kleine" <Matthias.Kleine@xxxxxxxxxxxx> wrote:
OK, kein Prompt mehr, sleep ist im Vordergrund. Jetzt soll es wieder in
den Hintergrund:

C-Z
[1]+ Stopped sleep 1000

Richtig. Der sleep-Prozeß bekommt ein Signal und wird gestoppt. Das
trifft ihn mitten in dem Systemaufruf nanosleep. (Eigentlich benutzt
das Programm sleep(1) die Bibliotheksfunktion sleep(3), aber die
greift intern wieder auf den Systemaufruf nanosleep(2) zurück.)

matthias@orka:~ > bg %1
[1]+ sleep 1000 &

Nun bekommt der Prozeß ein anderes Signal und wird fortgesetzt. Da der
nanosleep-Aufruf durch ein Signal unterbrochen wurde, kehrt er sofort
mit einer Fehlermeldung (errno == EINTR) zurück, bevor die Zeit
abgelaufen ist.

Scheint alles OK, aber:

matthias@orka:~ > jobs
[1]+ Done sleep 1000
matthias@orka:~ >

Der Job wurde statt in den Hintergrund geschickt beendet. Freilich,
bevor die 1000 Sekunden um waren.

Richtig. Denn sleep wurde offenbar nicht so programmiert, daß nach
der Störung noch wieder die verbleibende Zeit gewartet
wird. Stattdessen beendet sich sleep, egal, warum der nanosleep-Aufruf
zurückkehrt. Das läßt sich sogar halbwegs mit einem strace beobachten:

-> strace sleep 1000 2>bla &
[1] 19645
-> fg
strace sleep 1000 2>bla

[1]+ Stopped strace sleep 1000 2>bla
-> bg
[1]+ strace sleep 1000 2>bla &
->
[1]+ Done strace sleep 1000 2>bla
-> tail -5 bla
rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
rt_sigaction(SIGCHLD, NULL, {SIG_DFL}, 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
nanosleep({1000, 0}, 0xbffff07c) = -1 EINTR (Interrupted system call)
_exit(0) = ?

Kann mir das jemand erklären? Wie kann ich den Job aus dem Vordergrund
in den Hintergrund schicken, wenn es mit C-Z und bg %Jobnummer nicht
klappt?

Deine Vorgehensweise war schon richtig, aber manchmal haben solche
Aktionen eben ungewünschte Nebenwirkungen :-(

Eilert

--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Eilert Brinkmann -- Universitaet Bremen -- FB 3, Informatik
eilert@xxxxxxxxxxxxxxxxxxxxxxxx - eilert@xxxxxxx - eilert@xxxxxxxxxxxxxx
http://www.informatik.uni-bremen.de/~eilert/

---------------------------------------------------------------------
To unsubscribe, e-mail: suse-linux-unsubscribe@xxxxxxxx
For additional commands, e-mail: suse-linux-help@xxxxxxxx


< Previous Next >
Follow Ups