Linux: ändra stdout för en bakgrundsprocess?
Linux: ändra stdout för en bakgrundsprocess?
Om man via en telnet session startar ett program med myprogwithoutputtostdout &
och sen kopplar ner sig kommer programmet fortsätta snurra precis som jag vill, men när jag ser kopplar upp mig igen vill jag kunna fiska upp det och få tillbaka stdouten till den nya consolen. Men hur gör jag?
Borde jag istället startat utan & och gjort en ctrl-z och en bg och sen plockat upp den med fg igen istället?
och sen kopplar ner sig kommer programmet fortsätta snurra precis som jag vill, men när jag ser kopplar upp mig igen vill jag kunna fiska upp det och få tillbaka stdouten till den nya consolen. Men hur gör jag?
Borde jag istället startat utan & och gjort en ctrl-z och en bg och sen plockat upp den med fg igen istället?
-
- Inlägg: 8051
- Blev medlem: 18 januari 2009, 00:48:24
- Ort: Alvesta, Småland
Re: Linux: ändra stdout för en bakgrundsprocess?
Lägg den i screen och för guds skull använd ssh istället för telnet
screen -x <- resume ongong session
ctrl + a och sedan c = ny session i screenen
ctrl + a och sedan n för att hoppa till nästa
ctrl + a sedan d för detach.
O.s.v
screen -x <- resume ongong session
ctrl + a och sedan c = ny session i screenen
ctrl + a och sedan n för att hoppa till nästa
ctrl + a sedan d för detach.
O.s.v
Re: Linux: ändra stdout för en bakgrundsprocess?
Mitt system har inte screen eller ssh för den delen.
och ingen pakethanterare heller för den delen, så det blir att kompilera om jag vill köra det.
och ingen pakethanterare heller för den delen, så det blir att kompilera om jag vill köra det.
Re: Linux: ändra stdout för en bakgrundsprocess?
Mig veterligt går det inte att göra det du vill, inte utan utökningar som t.ex. screen.
Handlar det bara om att kunna se det programmet spottar ut på stdout kan du styra om stdout till en fil för att sedan när du loggar in igen köra "tail -f" på filen.
Handlar det bara om att kunna se det programmet spottar ut på stdout kan du styra om stdout till en fil för att sedan när du loggar in igen köra "tail -f" på filen.
Re: Linux: ändra stdout för en bakgrundsprocess?
Problemet när man kör ut på fil är att det buffrar 512byte - 4kB innan det skrivs ut till synlig fil i filsystem vilket gör att man aldrig ser det senaste utskriften eller ingen utskrift alls om processen bara ger få meddelande under hela körningen och filen skapas och skrivs först när processen avslutas och stängs.
Det här är ett huvudvärk i unixvärlden att man får helt olika buffer-beteende om stdout skrivs mot en blockdevice (dvs mot disk/fil) eller skriva mot en teckendevice (tty/console) och man nödgas att tex. använda 'screen' och liknande wrapper så att applikationen alltid tror att den skriver mot en tty och därmed obuffrad utskrift även om nohup används och går under process 1
Det här är ett huvudvärk i unixvärlden att man får helt olika buffer-beteende om stdout skrivs mot en blockdevice (dvs mot disk/fil) eller skriva mot en teckendevice (tty/console) och man nödgas att tex. använda 'screen' och liknande wrapper så att applikationen alltid tror att den skriver mot en tty och därmed obuffrad utskrift även om nohup används och går under process 1
-
- Inlägg: 8051
- Blev medlem: 18 januari 2009, 00:48:24
- Ort: Alvesta, Småland
Re: Linux: ändra stdout för en bakgrundsprocess?
xxargs att du måste skriva minst 512bytes stämmer inte. den skriver ner för varje \n. Ivf så gör alla de system ajg arbetar med detta.
hur vet jag det? Jo jag har program som skriver bara 1 siffra varje timme och den kommer exakt rätt...
Vi använder bland annat ovan till ganska så kritiska övervakningar av vissa program där enda sättet att se status är via detta och då har vi valt och skriva till fil
./programnamn > filnamn
hur vet jag det? Jo jag har program som skriver bara 1 siffra varje timme och den kommer exakt rätt...
Vi använder bland annat ovan till ganska så kritiska övervakningar av vissa program där enda sättet att se status är via detta och då har vi valt och skriva till fil
./programnamn > filnamn
Re: Linux: ändra stdout för en bakgrundsprocess?
iofs, teoretiskt kanske det stämmer, det kanske är så att det inte skrivs ner fysiskt på disken förrän efter 512 byte utan ligger i cachen men...
filsystemet ser då åckså till att en läsning av filen åckså läses från cachen och e.g. inte fysiskt från disken.
det kanske visar sig om datorn plötsligt blir strömlös, att det senaste inte finns kvar.
filsystemet ser då åckså till att en läsning av filen åckså läses från cachen och e.g. inte fysiskt från disken.
det kanske visar sig om datorn plötsligt blir strömlös, att det senaste inte finns kvar.
Re: Linux: ändra stdout för en bakgrundsprocess?
hur litet är systemet? jag har bråkat en del med liknande problem.
Då har jag gjort knäppa saker som att netcata data till minne, eller annan pryl, om det så är en androidtelefon, eller en "dum" serieanslutning
vad har vi för shell?
Då har jag gjort knäppa saker som att netcata data till minne, eller annan pryl, om det så är en androidtelefon, eller en "dum" serieanslutning
vad har vi för shell?
Re: Linux: ändra stdout för en bakgrundsprocess?
Kika på termios(4). Det går att ställa om till att buffra per tecken, rad eller block osv..danielr112 skrev:xxargs att du måste skriva minst 512bytes stämmer inte. den skriver ner för varje \n. Ivf så gör alla de system ajg arbetar med detta.
hur vet jag det? Jo jag har program som skriver bara 1 siffra varje timme och den kommer exakt rätt...
För att svara TS så skulle jag kika på tty(4) där kan man få en ledtråd för att skapa något liknande som "screen".
Re: Linux: ändra stdout för en bakgrundsprocess?
http://books.google.se/books?id=-RqMzqH ... om&f=false
ioctl() anropet heter: TIOCGETD / TIOCSETD
http://www.freebsd.org/cgi/man.cgi?quer ... .1-RELEASE
http://en.wikibooks.org/wiki/Serial_Programming/termios
Mao, hur buffringen hanteras har man inga garantier för.
ioctl() anropet heter: TIOCGETD / TIOCSETD
http://www.freebsd.org/cgi/man.cgi?quer ... .1-RELEASE
Finns en del ioctl() anrop för att trycka ut tecken och ändra hur in/ut skall hanteras:TIOCGETD int *ldisc
Return the current line discipline in the integer pointed to by ldisc.
http://en.wikibooks.org/wiki/Serial_Programming/termios
Mao, hur buffringen hanteras har man inga garantier för.