• Reset your password

User account menu

  • Artikler
  • Forside
  • Forum
  • Nyheder
  • Log in
Hjem
Linuxin 2025

Breadcrumb

  • Hjem
  • forums
  • Sådan lader man programmer køre selv om terminalen lukkes

Hvad kan du med 100% sikkerhed sige, at du har stemt?

Resultater

1
0% (0 stemmer)
2
0% (0 stemmer)
Schrödinger
100% (1 stemme)
Antal stemmer: 1
Af marlar | 27.08.2010 23:40

Sådan lader man programmer køre selv om terminalen lukkes

Artikel

Nogle programmer eller scripts tager så lang tid at køre at man ikke har mulighed for (eller gider) vente på de blive færdige. Det kan fx være en søgning efter en tekststreng, nedpakning af et stort antal filer, udsendelse af et nyhedsbrev og mange andre tidskrævende ting.



Hvis man bare lukker terminalen, vil programmet normalt stoppe, men heldigvis er der flere muligheder for at lade programmet fortsætte. Det er naturligvis mest aktuelt på en fjernserver, men nedenstående metoder virker også fint på ens lokale PC, så de er altså nemme at afprøve.



Metode 1, den nemme: nohup



Programmet nohup betyder No Hangup og bevirker at en proces ikke afbrydes selv om forbindelsen “lægges på”. Betegnelsen stammer fra de dage hvor man ringede op via et modem.



Bzip2 giver en meget høj kompression i forhold til zip og gzip, men til gengæld er den ret langsom. Da vi ikke gider vente på at minmappe bliver pakket ned, skriver vi nohup foran:



nohup tar cf - minmappe | bzip2 > minmappe.bz2 &



Tegnet & i slutningen af kommandoen sender processen i baggrunden så vi med det samme kan lukke terminalen. Evt. output der normal ville skrives til teminalen, ender i stedet i filen nohup.out så man senere kan læse det. I dette eksempel kommer der ikke noget output, men man kan fx køre:



nohup echo Hej verden

cat nohup.out




I stedet for at “Hej verden” ses i terminalen, ender det nu i filen nohup.out.



Nohup er fast inventar i de fleste distroer.





Metode 2, den avancerede: screen



Nohup er fint til mange ting, men hvad hvis man gerne vil vende tilbage til det kørende program senere, eller bare nu og da se hvordan det går? Til dette kan vi bruge det geniale program screen der starter en virtuel terminal.



screen

zip -r minmappe.zip minmappe

Ctrl-A D





Zip skriver hvad den er i gang med undervejs så man kan derfor holde øje med hvor langt den er nået. Når vi har set at pakningen kører som den skal, kan vi trykke Ctrl-A D for at afkoble (detache) sessionen og enten lave noget andet, eller helt lukke terminalen.



Senere kan vi vende tilbage til den gemte session ved at skrive



screen -r



og man vil se at zip stadig er i fuld gang (med mindre den altså er blevet færdig i mellemtiden). Så kan man igen afkoble den med Ctrl-A D, eller - hvis programmet er færdigt - ved at skrive exit for at forlade sessionen helt.



Man kan udmærket have flere sessioner åbne på en gang. Så kan man liste dem med screen -ls og derefter vælge den ønskede session ved at skrive dens pid:



screen -ls



Output:

11074.pts-1.marlar-laptop (27-08-2010 22:31:47) (Detached)

11057.pts-1.marlar-laptop (27-08-2010 22:21:26) (Detached)



screen -r 11074



Endelig kan man navngive en session med screen -S så det er nemmere at vende tilbage til den igen:



screen -S zipning

Ctrl-A D

screen -r zipning




Screen er ikke standard i de fleste distroer, det installeres med pakkesystemet, fx:



aptitude install screen





Metode 3, panikløsningen: disown



Du har sat phplist igang med at sende det seneste nyhedsbrev ud til de 5000 abonnenter da du opdager det er fyraften og gerne vil hjem. Desværre glemte du at bruge nohup eller screen, så hvis du lukker terminalen, stopper afsendelsen, og omvendt er det for risikabelt at lade computeren stå tændt med terminalen åben da enhver så vil have adgang til fjernserveren.



Heldigvis er der en simpel løsning:



Sæt først processen i baggrunden ved at trykke Ctrl-Z og derefter skrive bg. Nu kører nyhedsbrevet som en baggrundsproces, men vi kan stadig ikke lukke terminalen. Skriv derfor:



disown -h



Det fjerner ejerskabet af baggrundsprocesserne så de ikke længere tilhører terminalen og derfor ikke stopper når terminalen lukkes. Programmet fortsætter altså ufortrødent, og du kan roligt holde fyraften uden at få ballade med chefen.



Bemærk at disown ikke umiddelbart giver mulighed for at læse outputtet fra processen, så det er nok at betragte som en nødløsning. Men det har da reddet mig et par gange :-)



Installer disown med:



aptitude install disown



eller hvordan man nu gør i din distro.





Afsluttende bemærkning



I nogle linuxvarianter kan man bare lukke en terminal uden at baggrundsjob stopper. Det gælder fx min NAS som kører Busybox. På den kan jeg hverken bruge nohup, screen eller disown, men til gengæld kan jeg altså bare lukke terminalen hvis blot processen er sat i baggrunden.

  • Log in to post comments

Kommentarer7

14 år 8 måneder siden

Permalink

Indsendt af *klonk* den 28. august 2010 kl. 14:52

Permalink

God lille artikel - jeg

God lille artikel - jeg kendte ikke til 'disown' - den skal helt sikkert huskes.

  • Log in to post comments

14 år 8 måneder siden

Permalink

Indsendt af peder2tm den 28. august 2010 kl. 18:57

Permalink

bruger man zsh, kan man

bruger man zsh, kan man skrive '&!' efter en kommando, så bliver den både backgrounded og disowned.

  • Log in to post comments

14 år 8 måneder siden

Permalink

Indsendt af lbm den 28. august 2010 kl. 19:15

Permalink

Fin lille artikel, og god

Fin lille artikel, og god læsning !. :)

  • Log in to post comments

14 år 8 måneder siden

Permalink

Indsendt af marlar den 28. august 2010 kl. 20:47

Permalink

Tak for kommentarerne! Det

Tak for kommentarerne! Det er rart at jeg kan begynde at give tilbage af min viden efter at jeg i snart et år med Linux har belemret alle jer andre med de mærkeligste spørgsmål :-)

  • Log in to post comments

14 år 8 måneder siden

Permalink

Indsendt af coe den 29. august 2010 kl. 11:24

Permalink

Tilføjer lige min stemme

Tilføjer lige min stemme til koret.



Superfedt med sådan nogle artikler, der både er gennemarbejdede og brugbare. Stor ros herfra. Kom endelige med nogle flere :-)



/Carsten

  • Log in to post comments

14 år 8 måneder siden

Permalink

Indsendt af mjjzf den 30. august 2010 kl. 04:36

Permalink

Får du ikke almindeligvis

Får du ikke almindeligvis samme resultat ved bare at køre en kommando med & bagefter? Det plejer jeg da at bruge.

  • Log in to post comments

14 år 8 måneder siden

Permalink

Indsendt af marlar den 30. august 2010 kl. 09:29

Permalink

#6:Nej. Men som nævnt

#6:



Nej. Men som nævnt under "Afsluttende bemærkning" så er jeg klar over at det er sådan i nogle distributioner, det gælder fx min NAS.



Der kan måske også være forskel på hvilke programmer man prøver det med. Nogle "disowner" måske sig selv når de kommer i baggrunden, det er meget tænkeligt.

  • Log in to post comments

Svar søges

2 stk Jolla C2 sælges 0
Den er go 0
Vil du have et sikrere og mere privat internet? Du skal blot installere Vivaldi-browseren med Proton VPN understøttelse! 0
14. februar = I Love Free Software Day 0
Lokal fil-deling - for de dovne. 0

Seneste aktivitet

Det første forumindlæg efter installation af Forum-modulet 8
Test 1
Vanilla OS 12
Nye forum-indlæg viser sig kun 1 gang 1
Vil alle forumindlæg vise sig to gange 1
Hjælp til remote terminal vindue? 3
PCLinuxOS 19
Kan ikke boote på installation 24
80-20 reglen 1
Skærmlys fader ud på min bærbare 8
32 bit distro på max 700mb der stadig understøttes 26
Har vi nogen Linux konsulenter i Slagelse området? 3
Virkelig 7
gnome-software? 3
Archer T2U AC600 Wireless Dual Band USB Adapter 26
En farverig APT 3.0 udgivelse imponerer med sine nye funktioner 2
Unix's fødsel 2
Linux Mint 13
"Intet realistisk alternativ" - mig i r*ven 1
German state moving 30,000 PCs to LibreOffice 6

Copyright © 2025 Company Name - All rights reserved

Developed & Designed by Alaa Haddad