Vraag & Antwoord

OS Linux

Programma starten in achtergrond en dan uitloggen

4 antwoorden
  • Als gebruiker start ik wat programma's in de achtergrond (bv ./iocm&). Als ik daarna uitlog en inlog als bv root, zie ik dat programma's nog steeds draaien. Hoewel dat precies is wat ik nodig heb, heb ik altijd verondersteld dat als het parent-proces stopte, alle afgeleidde processen ook stopten. Is deze veronderstelling incorrect? Of niet van toepassing?
  • Volgens mij hangt het ook van het soort proces af. Iets als emacs wordt volgens mij altijd afgesloten. Wat ik doe om er zeker van te zijn dat het programma op de achtergrond doorwerkt, is het programma screen gebruiken. Screen is een programma dat een echte terminal nadoet. Alle output die normaal naar het scherm gaat, wordt door screen opgevangen (en evt. doorgestuurd naar waar jij op dat moment zit). Stel dat ik op m'n werk inlog op mijn machine thuis en ik zet wat compile-werk aan, en ik wil dan later als ik thuiskom gewoon de output zien, dan doe ik: user@pc$ screen (het programma screen wordt geladen en neemt je terminal over) user@pc$ gcc enzovoorts output verschijnt nu op scherm. vervolgens typ ik Ctrl-A Ctrl-D. Ctrl-A is de code die screen zegt dat het volgende een commando voor hem is. En Ctrl-D detacht het scherm. Dat bestaat nu alleen nog in het geheugen. Op mijn scherm zie ik nu de wereld zoals hij was voor ik screen startte. Thuisgekomen log ik weer op de pc in. Ditmaal typ ik: user@pc$ screen -r Zo reconnect ik weer met het virtuele scherm en ik zie weer alle output, alsof ik nooit op een ander scherm gezeten heb.
  • Volgens mij kan Linux geen onderscheid maken tussen soorten processen. En emacs draait altijd in de voorgrond, anders heb je er zo weinig aan :) Ik heb net even [i:538bc500b7]vi[/i:538bc500b7] gestart in de achtergrond. Als je dan probeert de terminal te stoppen (met exit) lukt dat niet omdat er [i:538bc500b7]stopped jobs[/i:538bc500b7] zijn. En die moet je eerst killen voordat je de terminal kunt afsluiten. De (zelf-geschreven) programma's waar het hier om gaat hebben geen screen-output tenzij je specifiek opgeeft dat je log-informatie wilt zien; in dat geval wordt er geschreven naar stderror. De normale manier om als gebruiker met het programma te communiceren is via een telnet-sessie of een dedicated user-interface. Het gebruik van het programma screen is in mijn geval dus niet nodig. Ik heb overigens (denk ik) het antwoord gevonden. Als je een programma in de achtergrond start, wordt het parent-proces het proces met PID 1. En dat verklaart waarom het niet wordt afgesloten als je de terminal sluit van waaruit je het proces hebt gestart.
  • [quote:1627321eb2="Wim Sturkenboom"]Ik heb net even [i:1627321eb2]vi[/i:1627321eb2] gestart in de achtergrond. Als je dan probeert de terminal te stoppen (met exit) lukt dat niet omdat er [i:1627321eb2]stopped jobs[/i:1627321eb2] zijn. En die moet je eerst killen voordat je de terminal kunt afsluiten. [/quote:1627321eb2] Ja, dat is waar. Dus het zit 'm in het feit of je naar stdout of stderr schrijft (of ga ik nu te kort door de bocht?) [quote:1627321eb2] Ik heb overigens (denk ik) het antwoord gevonden. Als je een programma in de achtergrond start, wordt het parent-proces het proces met PID 1. En dat verklaart waarom het niet wordt afgesloten als je de terminal sluit van waaruit je het proces hebt gestart.[/quote:1627321eb2] Dat klinkt idd aannemelijk.

Beantwoord deze vraag

Weet jij het antwoord op deze vraag? Registreer of meld je aan met je account

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.