|
| nohup vs. ingen nohup Fra : Lars Stokholm |
Dato : 09-05-09 17:49 |
|
Jeg har samme problem i både slrn og newsbeuter. I begge programmer har
jeg sat min browser til Firefox eller rettere "firefox <url> &".
Hvis jeg starter 'firefox &' fra rxvt-vindue og afslutter (u)rxvt med
'exit'-kommandoen, så får Firefox lov at leve. Men hvis jeg afslutter
rxvt ved at klikke i krydset, så dør Firefox-processen også.
Hvis jeg afslutter slrn eller newsbeuter dør firefox-processen på
lignende facon (med mindre jeg selvfølgeligt bruger nohup¹). Det sker
selvom jeg afslutter både slrn og newsbeuter helt reglementeret.
Jeg havde forventet at en afslutning af slrn eller newsbeuter (med
Q-tasten) var ligeså "ren" som en 'exit'-kommando i rxvt, men
tilsyneladende kan jeg ligeså godt klikke i krydset på det vindue de er
åbne i - Firefox dør alligevel. Hvad sker der?
PS: I praksis har jeg '> /dev/null 2>&1' på også, men det gør ingen
forskel i denne sammenhæng, så jeg har udeladt det i beskrivelsen.
¹) Problemet er så bare, at teksten i newsbeuter-vinduet en gang imellem
bliver overskrevet med en besked om, at output er skrevet til
nohup.log, nohub.txt eller hvad den hedder. Derudover bliver denne
fil lavet i $PWD. Det gider jeg ikke.
| |
Lars Stokholm (09-05-2009)
| Kommentar Fra : Lars Stokholm |
Dato : 09-05-09 22:29 |
|
Lars Stokholm wrote:
> Hvis jeg afslutter slrn eller newsbeuter dør firefox-processen på
> lignende facon (med mindre jeg selvfølgeligt bruger nohup¹). Det sker
> selvom jeg afslutter både slrn og newsbeuter helt reglementeret.
Måske skal jeg lige tilføje, at jeg starter begge programmer med
urxvt -e [program].
| |
Morten Guldager (10-05-2009)
| Kommentar Fra : Morten Guldager |
Dato : 10-05-09 19:43 |
|
2009-05-09 Lars Stokholm wrote
> Jeg har samme problem i både slrn og newsbeuter. I begge programmer har
> jeg sat min browser til Firefox eller rettere "firefox <url> &".
>
> Hvis jeg starter 'firefox &' fra rxvt-vindue og afslutter (u)rxvt med
> 'exit'-kommandoen, så får Firefox lov at leve. Men hvis jeg afslutter
> rxvt ved at klikke i krydset, så dør Firefox-processen også.
Hvordan viser f.eks. pstree familie-forholdet imellem dine processer der?
Er din firrefox blevet barn af din bash?
Normalt kan et simpelt trick der være en dobbelt fork, men jeg har ikke lige
prøvet at lave det i bash.
Hvad hvis du i stedet for
firefox &
skriver
bash -c 'firefox &' &
/Morten
| |
Lars Stokholm (10-05-2009)
| Kommentar Fra : Lars Stokholm |
Dato : 10-05-09 21:31 |
|
Morten Guldager wrote:
> Hvordan viser f.eks. pstree familie-forholdet imellem dine processer der?
> Er din firrefox blevet barn af din bash?
Nej, Firefox får sin egen gren under init.
> Normalt kan et simpelt trick der være en dobbelt fork, men jeg har ikke lige
> prøvet at lave det i bash.
>
> Hvad hvis du i stedet for
>
> firefox &
>
> skriver
>
> bash -c 'firefox &' &
Det blev til
browser "bash -c 'firefox %u &' &"
i newsbeuter, men det gør desværre ingen forskel.
| |
Klaus Alexander Seis~ (11-05-2009)
| Kommentar Fra : Klaus Alexander Seis~ |
Dato : 11-05-09 08:04 |
|
Lars Stokholm skrev:
> Det blev til
>
> browser "bash -c 'firefox %u &' &"
>
> i newsbeuter, men det gør desværre ingen forskel.
Kan du mon bruge dette:
browser "daemonize firefox '%u'"
hvor daemonize er den binære som er oversat fra:
#include <unistd.h>
int
main(int argc, char **argv)
{
int rc = daemon(1, 0);
if (rc)
return rc;
++argv;
return execvp(*argv, argv);
}
(oversæt med fx 'gcc -s -o daemonize{,.c}')
Mvh,
--
Klaus Alexander Seistrup
http://klaus.seistrup.dk/
| |
Lars Stokholm (11-05-2009)
| Kommentar Fra : Lars Stokholm |
Dato : 11-05-09 10:35 |
|
Klaus Alexander Seistrup wrote:
> Kan du mon bruge dette:
>
> browser "daemonize firefox '%u'"
Fantastisk. Det er ligesom et kinderæg. :) Mange tak.
Tilbage er bare spørgsmålet: Hvorfor er det nødvendigt?
| |
Jørgen Heesche (11-05-2009)
| Kommentar Fra : Jørgen Heesche |
Dato : 11-05-09 12:29 |
|
Lars Stokholm wrote:
> Klaus Alexander Seistrup wrote:
>> Kan du mon bruge dette:
>>
>> browser "daemonize firefox '%u'"
>
> Fantastisk. Det er ligesom et kinderæg. :) Mange tak.
>
> Tilbage er bare spørgsmålet: Hvorfor er det nødvendigt?
Når du lukker et terminalvindue ved at klikke på close (krydset) bliver
den shell, der kører i vinduet ikke termineret korrekt. En firefox
startet i baggrunden mister sit display, men bliver ikke lukket rigtigt
ned; firefox kører altså stadig, men er usynlig. Hvis man prøver at
starte en firefox igen får man en popup, der siger at der kører en
firefox, og man får valget mellem at restore firefox eller lukke firefox
endeligt.
--
Med venlig hilsen
Jørgen Heesche
mailto:heesche@webspeed.dk
| |
Klaus Alexander Seis~ (11-05-2009)
| Kommentar Fra : Klaus Alexander Seis~ |
Dato : 11-05-09 11:58 |
|
Lars Stokholm skrev:
> Tilbage er bare spørgsmålet: Hvorfor er det nødvendigt?
Hvis man dræber en forældreproces, dræber man samtidig alle under-
liggende børneprocesser, tænker jeg (måske med mindre børnene har
fået deres egen session-id, som bl.a. er det daemon(3) sørger for).
Mvh,
--
Klaus Alexander Seistrup
http://klaus.seistrup.dk/
| |
Lars Stokholm (11-05-2009)
| Kommentar Fra : Lars Stokholm |
Dato : 11-05-09 13:31 |
|
Klaus Alexander Seistrup wrote:
> Hvis man dræber en forældreproces, dræber man samtidig alle under-
> liggende børneprocesser, tænker jeg (måske med mindre børnene har
> fået deres egen session-id, som bl.a. er det daemon(3) sørger for).
Det giver også mening, men pstree viste jo netop, at Firefox ikke var et
barn til newsbeuter (f.eks.) men kun til init. Men du mener måske barn i
en anden forstand?
| |
Lars Stokholm (11-05-2009)
| Kommentar Fra : Lars Stokholm |
Dato : 11-05-09 13:35 |
|
Jørgen Heesche wrote:
> Når du lukker et terminalvindue ved at klikke på close (krydset) bliver
> den shell, der kører i vinduet ikke termineret korrekt. En firefox
> startet i baggrunden mister sit display, men bliver ikke lukket rigtigt
> ned; firefox kører altså stadig, men er usynlig. Hvis man prøver at
> starte en firefox igen får man en popup, der siger at der kører en
> firefox, og man får valget mellem at restore firefox eller lukke firefox
> endeligt.
Firefox blev faktisk også lukket. Startede jeg en ny Firefox, blev jeg
spurgt om jeg ville genskabe sidste session eller starte en ny (i hvert
fald hvis jeg havde flere tabs åbne, svjks). Så den kører altså ikke
(heller ikke usynligt) - i hvert fald i min konfiguration.
| |
Peter Makholm (11-05-2009)
| Kommentar Fra : Peter Makholm |
Dato : 11-05-09 14:12 |
|
Lars Stokholm <lars.stokholm@gmail.com> writes:
> Klaus Alexander Seistrup wrote:
>> Hvis man dræber en forældreproces, dræber man samtidig alle under-
>> liggende børneprocesser, tænker jeg (måske med mindre børnene har
>> fået deres egen session-id, som bl.a. er det daemon(3) sørger for).
>
> Det giver også mening, men pstree viste jo netop, at Firefox ikke var et
> barn til newsbeuter (f.eks.) men kun til init. Men du mener måske barn i
> en anden forstand?
Der er tale om to lidt forskellige forhold. Der er det simple
parent/child forhold, som pstree viser, og der er et koncept der
hedder process groups (session groups).
Parent/child-forholdet er primært af interesse når barnet dør. Så
bliver der sendt en SIGCHLD til parentprocessen og det er
parentprocessen der skal kalde wait(2) før barnet kan blive rydet
ordentligt op.
Process groups bliver primært brugt til at man kan sende et signal til
en hel process group på en gang. Hverken fork(2) eller execve(2)
skifter processgruppe, det skal gøres eksplicit med et kald til
setsid(2). Så hvis man bare forker et par gange, så forbliver man i
samme processgruppe og vil derfor modtage signaler til processgruppen.
//Makholm
| |
Andreas Plesner Jaco~ (11-05-2009)
| Kommentar Fra : Andreas Plesner Jaco~ |
Dato : 11-05-09 14:17 |
|
On 2009-05-11, Peter Makholm <peter@makholm.net> wrote:
>> Det giver også mening, men pstree viste jo netop, at Firefox ikke var et
>> barn til newsbeuter (f.eks.) men kun til init. Men du mener måske barn i
>> en anden forstand?
>
> Der er tale om to lidt forskellige forhold. Der er det simple
> parent/child forhold, som pstree viser, og der er et koncept der
> hedder process groups (session groups).
Process groups og session groups er to forskellige ting, og der er
derfor to kald, der er interessante: setpgrp() og setsid().
--
Andreas
| |
Peter Makholm (11-05-2009)
| Kommentar Fra : Peter Makholm |
Dato : 11-05-09 14:37 |
|
Andreas Plesner Jacobsen <apj@daarligstil.dk> writes:
> Process groups og session groups er to forskellige ting, og der er
> derfor to kald, der er interessante: setpgrp() og setsid().
Korrekt, men nært forbundne. setsid() har blandt andet den effekt at
den kaldende process kommer i sin egen process group og dette er et af
de væsentlige ønsker man har når man daemonisere en process.
//Makholm
| |
Andreas Plesner Jaco~ (11-05-2009)
| Kommentar Fra : Andreas Plesner Jaco~ |
Dato : 11-05-09 14:37 |
|
On 2009-05-11, Peter Makholm <peter@makholm.net> wrote:
>
>> Process groups og session groups er to forskellige ting, og der er
>> derfor to kald, der er interessante: setpgrp() og setsid().
>
> Korrekt, men nært forbundne. setsid() har blandt andet den effekt at
> den kaldende process kommer i sin egen process group og dette er et af
> de væsentlige ønsker man har når man daemonisere en process.
Yep. Det var mest din parentes jeg havde et problem med.
--
Andreas
| |
Lars Stokholm (11-05-2009)
| Kommentar Fra : Lars Stokholm |
Dato : 11-05-09 16:35 |
|
Peter Makholm wrote:
> Korrekt, men nært forbundne. setsid() har blandt andet den effekt at
> den kaldende process kommer i sin egen process group og dette er et af
> de væsentlige ønsker man har når man daemonisere en process.
Perfekt. Så 'setsid firefox > /dev/null 2>&1' gør vel nogenlunde det
samme som det daemonize-program Klaus havde lavet?
Det er i øvrigt underligt at 'setsid firefox <url>' ser ud til at "gå i
baggrunden", når jeg kalder det manuelt fra urxvt. Men hvis jeg putter
det i newsbeuters/slrns config-fil, så gør det ikke: Der er jeg nødt til
at putte det i baggrunden selv med &. Hvad skyldes det mon?
| |
|
|