| 
					
							
        
    
        
						
			 | 
			
			
					    
					
        
         
          
         
	
            | 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?
  
            
             |   |   
            
        
 
    
 
					
					 
			 | 
			
				
        
			 |