Linux: ändra stdout för en bakgrundsprocess?

Elektronik- och mekanikrelaterad mjukvara/litteratur. (T.ex schema-CAD, simulering, böcker, manualer mm. OS-problem hör inte hit!)
Användarvisningsbild
AndLi
Inlägg: 17116
Blev medlem: 11 februari 2004, 18:17:59
Ort: Knivsta
Kontakt:

Linux: ändra stdout för en bakgrundsprocess?

Inlägg av AndLi »

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?
danielr112
Inlägg: 8051
Blev medlem: 18 januari 2009, 00:48:24
Ort: Alvesta, Småland

Re: Linux: ändra stdout för en bakgrundsprocess?

Inlägg av danielr112 »

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
Användarvisningsbild
AndLi
Inlägg: 17116
Blev medlem: 11 februari 2004, 18:17:59
Ort: Knivsta
Kontakt:

Re: Linux: ändra stdout för en bakgrundsprocess?

Inlägg av AndLi »

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.
Användarvisningsbild
ajje
Inlägg: 2360
Blev medlem: 12 mars 2010, 16:35:31
Ort: Smedjebacken

Re: Linux: ändra stdout för en bakgrundsprocess?

Inlägg av ajje »

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.
xxargs
Inlägg: 10183
Blev medlem: 23 september 2006, 14:28:27
Ort: Södertälje

Re: Linux: ändra stdout för en bakgrundsprocess?

Inlägg av xxargs »

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
danielr112
Inlägg: 8051
Blev medlem: 18 januari 2009, 00:48:24
Ort: Alvesta, Småland

Re: Linux: ändra stdout för en bakgrundsprocess?

Inlägg av danielr112 »

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
svanted
Inlägg: 5083
Blev medlem: 30 augusti 2010, 21:20:38
Ort: Umeå

Re: Linux: ändra stdout för en bakgrundsprocess?

Inlägg av svanted »

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.
Rofhök
Inlägg: 560
Blev medlem: 11 februari 2006, 14:15:19
Ort: nässjö

Re: Linux: ändra stdout för en bakgrundsprocess?

Inlägg av Rofhök »

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?
blueint
Inlägg: 23238
Blev medlem: 4 juli 2006, 19:26:11
Kontakt:

Re: Linux: ändra stdout för en bakgrundsprocess?

Inlägg av blueint »

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...
Kika på termios(4). Det går att ställa om till att buffra per tecken, rad eller block osv..

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".
blueint
Inlägg: 23238
Blev medlem: 4 juli 2006, 19:26:11
Kontakt:

Re: Linux: ändra stdout för en bakgrundsprocess?

Inlägg av blueint »

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
TIOCGETD int *ldisc
Return the current line discipline in the integer pointed to by ldisc.
Finns en del ioctl() anrop för att trycka ut tecken och ändra hur in/ut skall hanteras:
http://en.wikibooks.org/wiki/Serial_Programming/termios

Mao, hur buffringen hanteras har man inga garantier för.
Skriv svar