Terminal program kørsel

Alle tekniske spørgsmål som ikke hører ind under de andre fora.
Stra
Indlæg: 3105
Tilmeldt: 16. jun 2007, 10:26
Geografisk sted: Ikast-Herning

Terminal program kørsel

Indlæg af Stra »

Problem:
jeg vil køre et program i terminal fx

Kode: Vælg alt

insync


Hvilket tilvalg skal jeg give det, for at jeg kan:

1) fortsætte med at arbejde i terminal ?

Kode: Vælg alt

insync +
er det ikke, men hvad så?

2) lukke terminal uden at programmet afsluttes?

Jeg har tidligere set løsningerne, men kan ikke finde dem (løsning var, så vidt jeg husker, givet af Lasohi)
stra
Bruger Ubuntu 22.04 og 22.10 + lubuntu 22.10
Claus Henriksen
Forfatter
Indlæg: 794
Tilmeldt: 21. jan 2007, 17:45
Geografisk sted: Christianshavn

Re: Terminal program kørsel

Indlæg af Claus Henriksen »

1. Brug & f.eks. insync &
2. Brug screen (apt-get install screen).
screen
Insync &
Ctrl-a d
3. Kom tilbage til insync i en anden terminal med screen -R
Claus Gårde Henriksen / Jeg bruger ikke Ubuntu / Debian Stable 12
laoshi
Redaktør
Indlæg: 5515
Tilmeldt: 26. apr 2008, 20:52
IRC nickname: laoshi
Geografisk sted: Vejle

Re: Terminal program kørsel

Indlæg af laoshi »

Du kan f.eks. også åbne et program med terminalen med et efterfølgende

Kode: Vælg alt

--nohup
- så lukker det ikke (=no hangup), selv om du lukker terminalen, eller bruger den til andet efter <ctrl>+z
Eks:

Kode: Vælg alt

flemming@laoshi:~$ chromium-browser --nohup
^Z
[1]+  Stopped                 chromium-browser --nohup
flemming@laoshi:~$

Og chromium-browseren kører fortsat...
"Von guten Mächten wunderbar geborgen
erwarten wir getrost was kommen mag.
Gott ist mit uns am Abend und am Morgen
Und ganz gewiss an jedem neuen Tag"

(Dietrich Bonhoeffer 1906-1945)

http://www.stromata.dk
https://wiki.ubuntu.com/FlemmingChristensen
https://launchpad.net/~laoshi
Claus Henriksen
Forfatter
Indlæg: 794
Tilmeldt: 21. jan 2007, 17:45
Geografisk sted: Christianshavn

Re: Terminal program kørsel

Indlæg af Claus Henriksen »

... og så er der faktisk også nohup kommandoen http://en.m.wikipedia.org/wiki/Nohup
Men at blokere for hang up signalet kan godt give uønskede 'sidegevinster' når programmet nægter at dø.
Claus Gårde Henriksen / Jeg bruger ikke Ubuntu / Debian Stable 12
lath
Indlæg: 5095
Tilmeldt: 27. apr 2008, 02:16
IRC nickname: lars_t_h
Geografisk sted: Fyn

Re: Terminal program kørsel

Indlæg af lath »

ubuntuuser42 skrev:... og så er der faktisk også nohup kommandoen http://en.m.wikipedia.org/wiki/Nohup
Men at blokere for hang up signalet kan godt give uønskede 'sidegevinster' når programmet nægter at dø.


Det er ikke et problem, for så sender du bare programmet et SIGKILL signal, som det ikke kan undslippe døden fra.

Hvis programmet process id (PID) er , feks. 1234 dræber den her kommando programmet med PID=1234:

Kode: Vælg alt

kill -9 1234


Er det firefox der guru mediterer og den ikke reagerer kan du få firefox til at dø ved at trække firefox PIDs ud med pgrep og overføre dem til kill kommandoen som argumenter på den her måde:

Kode: Vælg alt

kill -9 $(pgrep firefox)


/Lars
Jeg er Software ingeniør (Diplomingeniør) i Informationsteknologi og indlejede systemer, hvor indlejrede systemer er computer (microcontroller) + elektronik i for eksempel et TV, en router, en vaskemaskine og den slags
lath
Indlæg: 5095
Tilmeldt: 27. apr 2008, 02:16
IRC nickname: lars_t_h
Geografisk sted: Fyn

Re: Terminal program kørsel

Indlæg af lath »

Hvilket tilvalg skal jeg give det, for at jeg kan:

1) fortsætte med at arbejde i terminal ?


det er et &

Det virker naturligvis ikke med et program som sudo, gksudo, su, og gksu der prompter dig for et kodeord, da & netop starter programmet op i baggrunden.

Kører du den kommando på et program får du et tal tilbage i firkantede parenteser, f.eks. [1]
Det betyder at en kommandoen:

Kode: Vælg alt

fg 1

... sætter programmet i forgrunden.
Du kan også sætte et program i baggrunden ved at taste CTRL+Z
Giver det dig svaret [2], kan du så taste

Kode: Vælg alt

bg 2

... for at lade program arbejde videre i baggrunden.

Kode: Vælg alt

jobs

... fortæller dig om de processer du har kørende under bash' kontrol.

Emnet hedder Job control for bash, og der er en ret god guide her: http://www.symkat.com/understanding-job-control-in-bash

/Lars
Jeg er Software ingeniør (Diplomingeniør) i Informationsteknologi og indlejede systemer, hvor indlejrede systemer er computer (microcontroller) + elektronik i for eksempel et TV, en router, en vaskemaskine og den slags
Claus Henriksen
Forfatter
Indlæg: 794
Tilmeldt: 21. jan 2007, 17:45
Geografisk sted: Christianshavn

Re: Terminal program kørsel

Indlæg af Claus Henriksen »

lath skrev:
ubuntuuser42 skrev:... og så er der faktisk også nohup kommandoen http://en.m.wikipedia.org/wiki/Nohup
Men at blokere for hang up signalet kan godt give uønskede 'sidegevinster' når programmet nægter at dø.


Det er ikke et problem, for så sender du bare programmet et SIGKILL signal, som det ikke kan undslippe døden fra.

Hvis programmet process id (PID) er , feks. 1234 dræber den her kommando programmet med PID=1234:

Kode: Vælg alt

kill -9 1234


Er det firefox der guru mediterer og den ikke reagerer kan du få firefox til at dø ved at trække firefox PIDs ud med pgrep og overføre dem til kill kommandoen som argumenter på den her måde:

Kode: Vælg alt

kill -9 $(pgrep firefox)


/Lars


Uenig. 'kill -9' er ikke en løsning på ovenstånde, det er en grim workaround når man ikke kan andet. Grunden er at programmet man rammer ikke får chancen for at lægge sig pænt ned. F.eks. er en kill -9 på firefox eller andre risikabel idet programmet ikke får ryddet ordentlig op (har betalt mine dyre lærepenge i flere omgange...)
Claus Gårde Henriksen / Jeg bruger ikke Ubuntu / Debian Stable 12
laoshi
Redaktør
Indlæg: 5515
Tilmeldt: 26. apr 2008, 20:52
IRC nickname: laoshi
Geografisk sted: Vejle

Re: Terminal program kørsel

Indlæg af laoshi »

I den slag tilfælde bruger jeg

Kode: Vælg alt

killall PROGRAM
- det vælger en pæn nedlukning af programmet. Hvis man vil have en interaktiv nedlukning, kan man bruge

Kode: Vælg alt

killall -i PROGRAM

Der er en lidt længere forklaring til killall-kommandoen her.
"Von guten Mächten wunderbar geborgen
erwarten wir getrost was kommen mag.
Gott ist mit uns am Abend und am Morgen
Und ganz gewiss an jedem neuen Tag"

(Dietrich Bonhoeffer 1906-1945)

http://www.stromata.dk
https://wiki.ubuntu.com/FlemmingChristensen
https://launchpad.net/~laoshi
lath
Indlæg: 5095
Tilmeldt: 27. apr 2008, 02:16
IRC nickname: lars_t_h
Geografisk sted: Fyn

Re: Terminal program kørsel

Indlæg af lath »

ubuntuuser42 skrev:
lath skrev:
ubuntuuser42 skrev:... og så er der faktisk også nohup kommandoen http://en.m.wikipedia.org/wiki/Nohup
Men at blokere for hang up signalet kan godt give uønskede 'sidegevinster' når programmet nægter at dø.


Det er ikke et problem, for så sender du bare programmet et SIGKILL signal, som det ikke kan undslippe døden fra.

Hvis programmet process id (PID) er , feks. 1234 dræber den her kommando programmet med PID=1234:

Kode: Vælg alt

kill -9 1234


Er det firefox der guru mediterer og den ikke reagerer kan du få firefox til at dø ved at trække firefox PIDs ud med pgrep og overføre dem til kill kommandoen som argumenter på den her måde:

Kode: Vælg alt

kill -9 $(pgrep firefox)


/Lars


Uenig. 'kill -9' er ikke en løsning på ovenstånde, det er en grim workaround når man ikke kan andet. Grunden er at programmet man rammer ikke får chancen for at lægge sig pænt ned. F.eks. er en kill -9 på firefox eller andre risikabel idet programmet ikke får ryddet ordentlig op (har betalt mine dyre lærepenge i flere omgange...)


Hvis programmet er kommet i en udefineret tilstand er det kun programmørens skyld og ingen andre. Punktum!

Programmer må aldrig komme ud i en udefineret tilstand, fordi at det er i udefinerede tilstande at programmet enten:
  1. delvis virker, uden at ødelægge brugerens data (føl dig heldig)
  2. programmet bare ikke virker - det er stendødt
  3. programmet giver garbage ud, det er en variant af at data ødelægges
  4. programmet crasher Programmet bliver brutalt lukket ned af kernen (en kill SIGKILL køres mod programmet - inde fra kernen), fordi det forsøger at tilgå hukommelse der ikke er programmets ejendom
  5. programmet ødelægger brugerens data, så programmet i den definerede tilstand ikke kan læse brugerens data (dårligst)

Deadlock og livelocks er udefinerede tilstande, hvor en kill SIGKILL er eneste løsning, da man ikke kan reparere på deadlocks og livelocks på et kørende program.

At programmet (her firefox) ikke får ryddet pænt op er bare dårlig programmering, så må man skille programmet i en baggrundsproces, der er en service der styrer brugerens data, og en forgrundsproces, som ofte er den der indeholder de fleste fejl.
Chrome browseren har vist vejen ved at bruge flere processer, som giver en mere stabil browser. Hver tilføjelse kører endda i sin egen proces, altså som et program.

BTW, min favoritbrowser er Firefox, men jeg bruger også Chrome til nogle websides som firefox er dårlig til at håndtere, f.eks. Twitter.

/Lars
Jeg er Software ingeniør (Diplomingeniør) i Informationsteknologi og indlejede systemer, hvor indlejrede systemer er computer (microcontroller) + elektronik i for eksempel et TV, en router, en vaskemaskine og den slags
Claus Henriksen
Forfatter
Indlæg: 794
Tilmeldt: 21. jan 2007, 17:45
Geografisk sted: Christianshavn

Re: Terminal program kørsel

Indlæg af Claus Henriksen »

>Hvis programmet er kommet i en udefineret tilstand er det kun programmørens skyld og ingen andre. Punktum!
Ja, men du mener vel ikke man bare kan bruge kill -9 som andet end sidste udvej?
Claus Gårde Henriksen / Jeg bruger ikke Ubuntu / Debian Stable 12
lath
Indlæg: 5095
Tilmeldt: 27. apr 2008, 02:16
IRC nickname: lars_t_h
Geografisk sted: Fyn

Re: Terminal program kørsel

Indlæg af lath »

ubuntuuser42 skrev:>Hvis programmet er kommet i en udefineret tilstand er det kun programmørens skyld og ingen andre. Punktum!
Ja, men du mener vel ikke man bare kan bruge kill -9 som andet end sidste udvej?


Jeg bruger den som sidste udvej, hvis et program ikke vil dø.

I mine programmer definerer jeg både SIGHUB og SIGUSR1 til at lukke programmet pænt ned.
Dvs at hvis nohub sætter mit program's HUB signal til ignored, så kan du i stedet få det til at lukke pænt ned ved at sende et USR1 signal med kill kommandoen:

Kode: Vælg alt

kill -10 navn_på_programmet


/Lars
Jeg er Software ingeniør (Diplomingeniør) i Informationsteknologi og indlejede systemer, hvor indlejrede systemer er computer (microcontroller) + elektronik i for eksempel et TV, en router, en vaskemaskine og den slags